Obtenir les détails des certificats SAML dans Azure AD
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