Photo by Markus Spiske / Unsplash

Obtenir les détails des certificats SAML dans Azure AD

Microsoft 365 Feb 23, 2023

Avec SAML (Security Assertion Markup Language), la signature par certificat est importante pour garantir l'intégrité et l'authenticité des messages SAML. Lorsqu'un message SAML est signé numériquement à l'aide d'un certificat, il fournit l'assurance que le message n'a pas été altéré pendant la transmission (intégrité) et que l'expéditeur du message est bien celui qu'il prétend être (authenticité).

Il est important de suivre l'expiration du certificat de signature de jeton SAML. En effet, son expiration entraîne des perturbations d'authentification à l'application utilisant SAML.

Azure AD fournit la possibilité de configurer des adresses de notification pour recevoir des alertes sur les expirations de certificats. Vous pouvez le configurer dans Votre application > Authentification unique > Certificats SAML > E-mail de notification.

Il est possible d'ajouter plusieurs adresses e-mail. Comme l'adresse peut être interne ou externe, il n'y a pas de vérification de la validité de l'adresse. Veillez donc à saisir une adresse électronique valide.

Gardez aussi à l'esprit qu'un certificat de signature SAML peut être valide jusqu'à 3 ans, donc l'adresse e-mail de notification doit toujours exister à ce moment.

L'adresse électronique de notification dans la configuration SAML est préremplie par l'utilisateur qui a configuré les paramètres SAML. Cela peut être problématique car le compte utilisé est souvent un compte administrateur sans boîte aux lettres associée.

Le code PowerShell suivant peut être utilisé pour obtenir des informations sur les applications basées sur SAML, telles que le certificat, l'adresse électronique utilisée pour les notifications d'expiration de certificat et si le certificat est toujours valide.

try {
    Import-Module 'Microsoft.Graph.Applications' -ErrorAction Stop -ErrorVariable mgGraphAppsMissing
    Import-Module 'Microsoft.Graph.Identity.SignIns' -ErrorAction Stop -ErrorVariable mgGraphIdentitySignInsMissing
}
catch {
    if ($mgGraphAppsMissing) {
        Write-Warning "Failed to import Microsoft.Graph.Applications module: $($mgGraphAppsMissing.Exception.Message)"
    }
    if ($mgGraphIdentitySignInsMissing) {
        Write-Warning "Failed to import Microsoft.Graph.Identity.SignIns module: $($mgGraphIdentitySignInsMissing.Exception.Message)"
    }
    return
}

Connect-MgGraph -Scopes 'Application.Read.All'

# At the date of writing (23 february 2023), PreferredTokenSigningKeyEndDateTime parameter is only on Beta profile
Select-MgProfile -Name beta

[System.Collections.Generic.List[PSObject]]$samlApplicationsArray = @()
$samlApplications = Get-MgServicePrincipal -Filter "PreferredSingleSignOnMode eq 'saml'"

foreach ($samlApp in $samlApplications) {
    $object = [PSCustomObject][ordered]@{
        DisplayName                         = $samlApp.DisplayName
        Id                                  = $samlApp.Id
        AppId                               = $samlApp.AppId
        LoginUrl                            = $samlApp.LoginUrl
        LogoutUrl                           = $samlApp.LogoutUrl
        NotificationEmailAddresses          = $samlApp.NotificationEmailAddresses -join '|'
        AppRoleAssignmentRequired           = $samlApp.AppRoleAssignmentRequired
        PreferredSingleSignOnMode           = $samlApp.PreferredSingleSignOnMode
        PreferredTokenSigningKeyEndDateTime = $samlApp.PreferredTokenSigningKeyEndDateTime
        # PreferredTokenSigningKeyEndDateTime is date time, compared to now and see it is valid
        PreferredTokenSigningKeyValid       = $samlApp.PreferredTokenSigningKeyEndDateTime -gt (Get-Date)
        ReplyUrls                           = $samlApp.ReplyUrls -join '|'
        SignInAudience                      = $samlApp.SignInAudience
    }

    $samlApplicationsArray.Add($object)
}

return $samlApplicationsArray

Bastien Perez

Freelance Microsoft 365 - Active Directory - Modern Workplace