Configurer l’authentification unique SAML pour votre application à l’aide de Microsoft Graph

L’authentification unique (SSO) est une méthode d’authentification qui permet aux utilisateurs de se connecter à une application, puis d’accéder à plusieurs applications sans avoir à se reconnecter. Microsoft Entra prend en charge différentes méthodes d’authentification unique, notamment OpenID Connect, OAuth, SAML (Security Assertion Markup Language), l’authentification unique basée sur un mot de passe et l’authentification unique liée. À l’aide de Microsoft Graph, vous pouvez automatiser la configuration de l’authentification unique pour votre application.

Dans ce tutoriel, vous apprenez à effectuer les opérations suivantes :

  • Identifier les applications SAML dans la galerie Microsoft Entra et configurer l’authentification unique SAML pour une application
  • Ajouter des rôles d’application à une application et les accorder aux utilisateurs
  • Configurer les revendications à émettre dans le jeton SAML
  • Configurer un certificat pour l’authentification unique fédérée
  • Récupérer les métadonnées SAML Microsoft Entra ID de votre application que vous utilisez pour terminer l’intégration

Configuration requise

  • Connectez-vous à un client API tel que Graph Explorer en tant qu’utilisateur avec le rôle Administrateur d’application cloud dans votre locataire Microsoft Entra.
  • Accordez-vous les autorisations déléguées suivantes : Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All, Policy.Read.All, Policy.ReadWrite.ApplicationConfigurationet User.ReadWrite.All.
  • Avoir un utilisateur de test à affecter à l’application.

Étape 1 : Identifier l’application à configurer

Microsoft Entra ID dispose d’une galerie qui contient des milliers d’applications préinsérées que vous pouvez utiliser comme modèle pour votre application. Dans Microsoft Graph, cette liste est disponible via l’entité applicationTemplate .

Dans cette étape, vous identifiez le modèle d’application pour l’application AWS IAM Identity Center (successor to AWS Single Sign-On) que vous souhaitez configurer. Enregistrez son ID.

Demande

GET https://graph.microsoft.com/v1.0/applicationTemplates?$filter=displayName eq 'AWS IAM Identity Center (successor to AWS Single Sign-On)'

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applicationTemplates",
    "@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET applicationTemplates?$select=categories,description",
    "value": [
        {
            "id": "21ed01d2-ec13-4e9e-86c1-cd546719ebc4",
            "displayName": "AWS IAM Identity Center (successor to AWS Single Sign-On)",
            "homePageUrl": "https://aws.amazon.com/",
            "supportedSingleSignOnModes": [
                "saml",
                "external"
            ],
            "supportedProvisioningTypes": [
                "sync"
            ],
            "logoUrl": "https://galleryapplogos1.azureedge.net/app-logo/awssinglesignon_FC86917E_215.png",
            "categories": [
                "developerServices",
                "itInfrastructure",
                "security",
                "New"
            ],
            "publisher": "Amazon Web Services, Inc.",
            "description": "Federate once to AWS IAM Identity Center (successor to AWS Single Sign-On) & use it to centrally manage access to multiple AWS accounts and IAM Identity Center enabled apps. Provision users via SCIM."
        }
    ]
}

Étape 2 : Instancier l’application

À l’aide de la valeur id du modèle d’application, créez une instance de l’application dans votre locataire. Ici, vous nommez l’application AWS Contoso. La réponse inclut un objet d’application et de principal de service pour AWS Contoso, qui est un instance de l’application AWS IAM Identity Center (successeur de l’authentification unique AWS). Enregistrez les ID des deux objets pour les utiliser plus loin dans ce didacticiel.

Demande

POST https://graph.microsoft.com/v1.0/applicationTemplates/21ed01d2-ec13-4e9e-86c1-cd546719ebc4/instantiate
Content-type: application/json

{
  "displayName": "AWS Contoso"
}

Réponse

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.applicationServicePrincipal",
    "application": {
        "id": "b7308000-8bb3-467b-bfc7-8dbbfd759ad9",
        "appId": "2fbc8259-0f56-4f56-9870-93a228020936",
        "applicationTemplateId": "21ed01d2-ec13-4e9e-86c1-cd546719ebc4",
        "createdDateTime": "2024-02-21T17:14:33Z",
        "deletedDateTime": null,
        "displayName": "AWS Contoso",
        "description": null,
        "groupMembershipClaims": null,
        "identifierUris": [],
        "isFallbackPublicClient": false,
        "signInAudience": "AzureADMyOrg",
        "tags": [],
        "tokenEncryptionKeyId": null,
        "defaultRedirectUri": null,
        "samlMetadataUrl": null,
        "optionalClaims": null,
        "addIns": [],
        "api": {
            "acceptMappedClaims": null,
            "knownClientApplications": [],
            "requestedAccessTokenVersion": null,
            "oauth2PermissionScopes": [
                {
                    "adminConsentDescription": "Allow the application to access AWS Contoso on behalf of the signed-in user.",
                    "adminConsentDisplayName": "Access AWS Contoso",
                    "id": "f5419931-094d-481d-b801-ab3ed60d48d8",
                    "isEnabled": true,
                    "type": "User",
                    "userConsentDescription": "Allow the application to access AWS Contoso on your behalf.",
                    "userConsentDisplayName": "Access AWS Contoso",
                    "value": "user_impersonation"
                }
            ],
            "preAuthorizedApplications": []
        },
        "appRoles": [
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "User",
                "id": "8774f594-1d59-4279-b9d9-59ef09a23530",
                "isEnabled": true,
                "description": "User",
                "value": null,
                "origin": "Application"
            },
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "msiam_access",
                "id": "e7f1a7f3-9eda-48e0-9963-bd67bf531afd",
                "isEnabled": true,
                "description": "msiam_access",
                "value": null,
                "origin": "Application"
            }
        ],
        "info": {
            "logoUrl": null,
            "marketingUrl": null,
            "privacyStatementUrl": null,
            "supportUrl": null,
            "termsOfServiceUrl": null
        },
        "keyCredentials": [],
        "parentalControlSettings": {
            "countriesBlockedForMinors": [],
            "legalAgeGroupRule": "Allow"
        },
        "passwordCredentials": [],
        "publicClient": {
            "redirectUris": []
        },
        "requiredResourceAccess": [],
        "verifiedPublisher": {
            "displayName": null,
            "verifiedPublisherId": null,
            "addedDateTime": null
        },
        "web": {
            "homePageUrl": "https://*.signin.aws.amazon.com/platform/saml/acs/*?metadata=awssinglesignon|ISV9.1|primary|z",
            "redirectUris": [
                "https://*.signin.aws.amazon.com/platform/saml/acs/*"
            ],
            "logoutUrl": null
        }
    },
    "servicePrincipal": {
        "id": "d3616293-fff8-4415-9f01-33b05dad1b46",
        "deletedDateTime": null,
        "accountEnabled": true,
        "appId": "2fbc8259-0f56-4f56-9870-93a228020936",
        "applicationTemplateId": "21ed01d2-ec13-4e9e-86c1-cd546719ebc4",
        "appDisplayName": "AWS Contoso",
        "alternativeNames": [],
        "appOwnerOrganizationId": "38d49456-54d4-455d-a8d6-c383c71e0a6d",
        "displayName": "AWS Contoso",
        "appRoleAssignmentRequired": true,
        "loginUrl": null,
        "logoutUrl": null,
        "homepage": "https://*.signin.aws.amazon.com/platform/saml/acs/*?metadata=awssinglesignon|ISV9.1|primary|z",
        "notificationEmailAddresses": [],
        "preferredSingleSignOnMode": null,
        "preferredTokenSigningKeyThumbprint": null,
        "replyUrls": [],
        "servicePrincipalNames": [
            "2fbc8259-0f56-4f56-9870-93a228020936"
        ],
        "servicePrincipalType": "Application",
        "tags": [
            "WindowsAzureActiveDirectoryIntegratedApp"
        ],
        "tokenEncryptionKeyId": null,
        "samlSingleSignOnSettings": null,
        "addIns": [],
        "appRoles": [
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "User",
                "id": "8774f594-1d59-4279-b9d9-59ef09a23530",
                "isEnabled": true,
                "description": "User",
                "value": null,
                "origin": "Application"
            },
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "msiam_access",
                "id": "e7f1a7f3-9eda-48e0-9963-bd67bf531afd",
                "isEnabled": true,
                "description": "msiam_access",
                "value": null,
                "origin": "Application"
            }
        ],
        "info": {
            "logoUrl": null,
            "marketingUrl": null,
            "privacyStatementUrl": null,
            "supportUrl": null,
            "termsOfServiceUrl": null
        },
        "keyCredentials": [],
        "oauth2PermissionScopes": [
            {
                "adminConsentDescription": "Allow the application to access AWS Contoso on behalf of the signed-in user.",
                "adminConsentDisplayName": "Access AWS Contoso",
                "id": "f5419931-094d-481d-b801-ab3ed60d48d8",
                "isEnabled": true,
                "type": "User",
                "userConsentDescription": "Allow the application to access AWS Contoso on your behalf.",
                "userConsentDisplayName": "Access AWS Contoso",
                "value": "user_impersonation"
            }
        ],
        "passwordCredentials": [],
        "verifiedPublisher": {
            "displayName": null,
            "verifiedPublisherId": null,
            "addedDateTime": null
        }
    }
}

Étape 3 : Configurer l’authentification unique

Dans cette étape, vous allez configurer l’authentification unique pour l’application AWS Contoso et le principal de service. Pour l’application, vous configurez les URL SAML tandis que pour le principal de service, vous définissez le mode d’authentification unique sur saml.

Étape 3.1 : Définir le mode d’authentification unique pour le principal de service

Définissez saml comme mode d’authentification unique pour le principal de service que vous avez créé à l’étape 2. La requête retourne un code de réponse 204 No Content .

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/d3616293-fff8-4415-9f01-33b05dad1b46
Content-type: application/json

{
  "preferredSingleSignOnMode": "saml"
}

Étape 3.2 : Définir des URL SAML de base pour l’application

Dans cette étape, définissez leredirectUrisweb/ et leredirectUrisweb/ pour l’application que vous avez créée à l’étape 2. La requête retourne un code de réponse 204 No Content .

PATCH https://graph.microsoft.com/v1.0/applications/b7308000-8bb3-467b-bfc7-8dbbfd759ad9
Content-type: application/json

{
    "identifierUris": [
        "https://signin.aws.amazon.com/saml"
    ],
    "web": {
        "redirectUris": [
            "https://signin.aws.amazon.com/saml"
        ]
    }
}

Étape 4 : Ajouter des rôles d’application

Si l’application nécessite les informations de rôle dans le jeton, ajoutez la définition des rôles dans l’objet application. Par défaut, l’objet appRoles dans l’application et le principal de service à l’étape 2 incluaient les rôles par défaut User et msiam_access . Ne les modifiez pas ou ne les supprimez pas. Pour ajouter des rôles de mode, vous devez inclure les rôles existants et les nouveaux rôles dans l’objet appRoles dans la requête. Sinon, les rôles existants sont remplacés.

Dans cette étape, ajoutez les Finance,WAAD rôles et Admin,WAAD au principal de service AWS Contoso. La requête retourne un code de réponse 204 No Content .

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/d3616293-fff8-4415-9f01-33b05dad1b46
Content-type: application/json

{
    "appRoles": [
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "User",
            "displayName": "User",
            "id": "8774f594-1d59-4279-b9d9-59ef09a23530",
            "isEnabled": true,
            "origin": "Application",
            "value": null
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "msiam_access",
            "displayName": "msiam_access",
            "id": "e7f1a7f3-9eda-48e0-9963-bd67bf531afd",
            "isEnabled": true,
            "origin": "Application",
            "value": null
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Admin,WAAD",
            "displayName": "Admin,WAAD",
            "id": "3a84e31e-bffa-470f-b9e6-754a61e4dc63",
            "isEnabled": true,
            "value": "arn:aws:iam::212743507312:role/accountname-aws-admin,arn:aws:iam::212743507312:saml-provider/WAAD"
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Finance,WAAD",
            "displayName": "Finance,WAAD",
            "id": "7a960000-ded3-455b-8c04-4f2ace00319b",
            "isEnabled": true,
            "value": "arn:aws:iam::212743507312:role/accountname-aws-finance,arn:aws:iam::212743507312:saml-provider/WAAD"
        }
    ]
}

Étape 5 : Configurer le mappage des revendications

Vous souhaitez configurer les attributs SAML en mappant les champs Microsoft Entra ID avec des attributs d’application AWS IAM Identity Center spécifiques. Par conséquent, vous créez une stratégie de mappage de revendications et vous l’affectez au principal de service.

Étape 5.1 : Créer une stratégie de mappage de revendications

En plus des revendications de base, configurez les revendications suivantes pour que Microsoft Entra ID émettent dans le jeton SAML :

Nom de la revendication Source
https://aws.amazon.com/SAML/Attributes/Role assignedroles
https://aws.amazon.com/SAML/Attributes/RoleSessionName userprincipalname
https://aws.amazon.com/SAML/Attributes/SessionDuration "900"
appRoles assignedroles
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier userprincipalname

Remarque

Certaines clés de la stratégie de mappage de revendications, telles que Version, respectent la casse. Le message d’erreur « La propriété a une valeur non valide » peut être un problème de respect de la casse.

Créez la stratégie de mappage de revendications et enregistrez son ID pour l’utiliser plus loin dans ce tutoriel.

Demande

POST https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies
Content-type: application/json

{
    "definition": [
        "{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\": [{\"Source\":\"user\",\"ID\":\"assignedroles\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/Role\"}, {\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/RoleSessionName\"}, {\"Value\":\"900\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/SessionDuration\"}, {\"Source\":\"user\",\"ID\":\"assignedroles\",\"SamlClaimType\": \"appRoles\"}, {\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/nameidentifier\"}]}}"
    ],
    "displayName": "AWS Claims Policy",
    "isOrganizationDefault": false
}

Réponse

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#policies/claimsMappingPolicies/$entity",
    "id": "92037c7a-a875-49a0-814e-8ec30f880e2e",
    "deletedDateTime": null,
    "definition": [
        "{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\": [{\"Source\":\"user\",\"ID\":\"assignedroles\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/Role\"}, {\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/RoleSessionName\"}, {\"Value\":\"900\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/SessionDuration\"}, {\"Source\":\"user\",\"ID\":\"assignedroles\",\"SamlClaimType\": \"appRoles\"}, {\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\": \"https://aws.amazon.com/SAML/Attributes/nameidentifier\"}]}}"
    ],
    "displayName": "AWS Claims Policy",
    "isOrganizationDefault": false
}

Étape 5.2 : Affecter la stratégie de mappage des revendications au principal de service

La requête retourne un code de réponse 204 No Content .

POST https://graph.microsoft.com/v1.0/servicePrincipals/ef04fead-8549-4e59-b5f7-d1d8c697ec64/claimsMappingPolicies/$ref
Content-type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/92037c7a-a875-49a0-814e-8ec30f880e2e"
}

Étape 6 : Configurer un certificat de signature

Vous avez besoin d’un certificat que Microsoft Entra ID pouvez utiliser pour signer une réponse SAML. Vous pouvez utiliser le point de /addTokenSigningCertificate terminaison pour créer un certificat de signature de jeton pour le principal de service. Vous pouvez également créer un certificat auto-signé et le charger sur le principal de service.

Après avoir ajouté le certificat, le principal de service contient deux objets dans la collection keyCredentials : un pour la clé privée et un pour la clé publique ; et un objet dans la collection passwordCredentials pour le mot de passe du certificat.

Option 1 : Créer un certificat de signature de jeton pour le principal de service

Demande

POST https://graph.microsoft.com/v1.0/servicePrincipals/d3616293-fff8-4415-9f01-33b05dad1b46/addTokenSigningCertificate
Content-type: application/json

{
    "displayName": "CN=AWSContoso",
    "endDateTime": "2027-01-22T00:00:00Z"
}

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.selfSignedCertificate",
    "customKeyIdentifier": "wt3YBEyVas0CaadaZLeGLbndrD4=",
    "displayName": "CN=AWSContoso",
    "endDateTime": "2027-01-22T00:00:00Z",
    "key": "MIICqjCCAZKgAwIBAgIIZYCy..KlDixjUT61i4tFs=",
    "keyId": "04e5ac4e-31f9-41ad-83e2-6dd41e1d81f4",
    "startDateTime": "2024-02-21T17:09:35.0006942Z",
    "thumbprint": "C2DDD8044C956ACD0269A75A64B7862DB9DDAC3E",
    "type": "AsymmetricX509Cert",
    "usage": "Verify"
}

Option 2 : Créer un certificat de signature personnalisé

Vous pouvez utiliser les scripts PowerShell et C# suivants pour obtenir un certificat auto-signé à des fins de test. Utilisez les meilleures pratiques de sécurité de votre entreprise pour créer un certificat de signature pour la production.

Le script suivant crée un certificat auto-signé avec le nom que vous donnez lorsque fqdn vous y êtes invité, par exemple, CN=AWSContoso. Il protège le certificat avec le mot de passe que vous fournissez dans pwd et exporte les certificats PFX et CER vers l’emplacement que vous spécifiez dans location.

Param(
    [Parameter(Mandatory=$true)]
    [string]$fqdn,
    [Parameter(Mandatory=$true)]
    [string]$pwd,
    [Parameter(Mandatory=$true)]
    [string]$location
) 

if (!$PSBoundParameters.ContainsKey('location'))
{
    $location = "."
} 

$cert = New-SelfSignedCertificate -certstorelocation cert:\currentuser\my -DnsName $fqdn
$pwdSecure = ConvertTo-SecureString -String $pwd -Force -AsPlainText
$path = 'cert:\currentuser\my\' + $cert.Thumbprint
$cerFile = $location + "\\" + $fqdn + ".cer"
$pfxFile = $location + "\\" + $fqdn + ".pfx" 

Export-PfxCertificate -cert $path -FilePath $pfxFile -Password $pwdSecure
Export-Certificate -cert $path -FilePath $cerFile

Extraire les détails du certificat

À l’étape précédente, vous disposez des certificats CER et PFX. Extrayez les valeurs de la clé privée, du mot de passe, de la clé publique et de l’empreinte numérique du certificat à ajouter au principal de service.

Extraire l’empreinte numérique du certificat
Demande

Le script PowerShell suivant vous permet d’extraire l’empreinte numérique du fichier CER. Remplacez le chemin d’accès au fichier par l’emplacement de votre certificat.

## Replace the file path with the source of your certificate

Get-PfxCertificate -Filepath "C:\Users\admin\Desktop\CN=AWSContoso.cer" | Out-File -FilePath "C:\Users\admin\Desktop\CN=AWSContoso.cer.thumbprint.txt"
Réponse

Le fichier CN=AWSContoso.cer.thumbprint.txt a une entrée similaire à la sortie suivante.

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A  CN=AWSContoso        {Client Authentication, Server Authentication}
Extraire la clé de certificat

Le script PowerShell suivant vous permet d’extraire la clé publique du fichier CER. Remplacez le chemin d’accès au fichier par l’emplacement de votre certificat.

Demande
[convert]::ToBase64String((Get-Content C:\Users\admin\Desktop\CN=AWSContoso.cer -AsByteStream -Raw))  | Out-File -FilePath "C:\Users\admin\Desktop\CN=AWSContoso.cer.key.txt"
Réponse

Le fichier CN=AWSContoso.cer.key.txt a une valeur encodée en base64 similaire à la sortie tronquée suivante.

MIIDHjCCAgagAwIBAgIQYDbahiL7NY...6qCMVJKHAQGzGwg==

Ajouter la clé de signature personnalisée

Ajoutez les détails suivants aux keyCredentials et passwordCredentials pour le principal de service. Lorsque les deux objets ont les mêmes propriétés, vous devez attribuer les mêmes valeurs pour ces propriétés.

  • CustomKeyIdentifier est le hachage de l’empreinte numérique du certificat.
  • StartDateTime est la date à laquelle ou après la création du certificat.
  • EndDateTime peut être un maximum de trois ans à partir de startDateTime. S’il n’est pas spécifié, le système attribue automatiquement une date un an après startDateTime.
  • Le type et l’utilisation doivent être :
    • AsymmetricX509Cert et Verify respectivement dans le même objet.
    • X509CertAndPassword et Sign respectivement dans le même objet.
  • Affectez le nom de l’objet du certificat à la propriété displayName .
  • La clé est la valeur encodée en Base64 que vous avez générée à l’étape précédente.
  • KeyId est un GUID que vous pouvez définir.

La requête retourne un code de réponse 204 No Content .

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/ef04fead-8549-4e59-b5f7-d1d8c697ec64
Content-type: application/json

{
    "keyCredentials": [
        {
            "customKeyIdentifier": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A",
            "endDateTime": "2027-01-22T00:00:00Z",
            "keyId": "4c266507-3e74-4b91-aeba-18a25b450f6e",
            "startDateTime": "2024-02-21T17:09:35Z",
            "type": "X509CertAndPassword",
            "usage": "Sign",
            "key": "MIICqjCCAZKgAwIBAgIIZYCy..KlDixjUT61i4tFs=",
            "displayName": "CN=AWSContoso"
        },
        {
            "customKeyIdentifier": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A",
            "endDateTime": "2027-01-22T00:00:00Z",
            "keyId": "e35a7d11-fef0-49ad-9f3e-aacbe0a42c42",
            "startDateTime": "2024-02-21T17:09:35Z",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "key": "MIICqjCCAZKgAwIBAgIIZYCy..KlDixjUT61i4tFs=",
            "displayName": "CN=AWSContoso"
        }
    ],
    "passwordCredentials": [
        {
            "customKeyIdentifier": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A",
            "keyId": "4c266507-3e74-4b91-aeba-18a25b450f6e",
            "endDateTime": "2022-01-27T19:40:33Z",
            "startDateTime": "2027-01-22T00:00:00Z",
            "secretText": "61891f4ee44d"
        }
    ]
}

Activez la clé de signature personnalisée

Vous devez définir la propriété preferredTokenSigningKeyThumbprint du principal de service sur l’empreinte numérique du certificat que vous souhaitez Microsoft Entra ID utiliser pour signer la réponse SAML. La requête retourne un code de réponse 204 No Content .

Demande

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/d3616293-fff8-4415-9f01-33b05dad1b46
Content-type: application/json

{
    "preferredTokenSigningKeyThumbprint": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A"
}

Étape 7 : Affecter des utilisateurs à l’application

Affecter un utilisateur à l’application

Affectez l’utilisateur que vous avez créé au principal de service et accordez-lui le rôle d’application Admin,WAAD . Dans le corps de la demande, fournissez les valeurs suivantes :

  • principalId : ID du compte d’utilisateur que vous avez créé.
  • appRoleId : ID du Admin,WAAD rôle d’application que vous avez ajouté.
  • resourceId : ID du principal de service.

Demande

POST https://graph.microsoft.com/v1.0/servicePrincipals/d3616293-fff8-4415-9f01-33b05dad1b46/appRoleAssignments
Content-type: application/json

{
    "principalId": "59bb3898-0621-4414-ac61-74f9d7201355",
    "principalType": "User",
    "appRoleId": "3a84e31e-bffa-470f-b9e6-754a61e4dc63",
    "resourceId": "d3616293-fff8-4415-9f01-33b05dad1b46"
}

Réponse

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('d3616293-fff8-4415-9f01-33b05dad1b46')/appRoleAssignments/$entity",
    "id": "mDi7WSEGFESsYXT51yATVdouI-92Rw1OgPSpSxEvaLg",
    "deletedDateTime": null,
    "appRoleId": "3a84e31e-bffa-470f-b9e6-754a61e4dc63",
    "createdDateTime": "2024-02-21T18:07:54.7959075Z",
    "principalDisplayName": "Adele Vance",
    "principalId": "59bb3898-0621-4414-ac61-74f9d7201355",
    "principalType": "User",
    "resourceDisplayName": "AWS Contoso",
    "resourceId": "d3616293-fff8-4415-9f01-33b05dad1b46"
}

Étape 8 : Obtenir Microsoft Entra ID métadonnées SAML pour l’application AWS Contoso

Utilisez l’URL suivante pour obtenir les métadonnées SAML Microsoft Entra ID pour l’application AWS Contoso. Remplacez par {tenant-id} l’ID de locataire et {appId} par l’appId de l’application AWS Contoso. Les métadonnées contiennent des informations telles que le certificat de signature, Microsoft Entra entityID et Microsoft Entra SingleSignOnService, entre autres.

https://login.microsoftonline.com/{tenant-id}/federationmetadata/2007-06/federationmetadata.xml?appid={appId}

L’exemple suivant montre ce que vous pouvez voir pour votre application. Enregistrez les données au format XML.

<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="_26313693-22d4-4361-8e48-ea19bb8616e1" entityID="https://sts.windows.net/38d49456-54d4-455d-a8d6-c383c71e0a6d/">
<RoleDescriptor xmlns:fed="http://docs.oasis-open.org/wsfed/federation/200706" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="fed:SecurityTokenServiceType" protocolSupportEnumeration="http://docs.oasis-open.org/wsfed/federation/200706">
<fed:ClaimTypesOffered>
...
<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://login.microsoftonline.com/38d49456-54d4-455d-a8d6-c383c71e0a6d/saml2"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://login.microsoftonline.com/38d49456-54d4-455d-a8d6-c383c71e0a6d/saml2"/>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.microsoftonline.com/38d49456-54d4-455d-a8d6-c383c71e0a6d/saml2"/>
</IDPSSODescriptor>
</EntityDescriptor>

Étape 9 : Terminer et tester l’intégration

Maintenant que vous avez terminé les étapes de configuration de l’application dans Microsoft Entra ID et que vous disposez des métadonnées SAML, connectez-vous à votre site d’entreprise AWS IAM Identity Center en tant qu’administrateur et :

  1. Suivez les étapes pour configurer l’authentification unique AWS IAM Identity Center.
  2. Créez un utilisateur de test dont le nom d’utilisateur et l’adresse e-mail correspondent au compte d’utilisateur que vous avez créé dans Microsoft Entra ID.
  3. Testez l’intégration de l’authentification unique.

Étape 10 : Nettoyer les ressources

Dans cette étape, supprimez les ressources que vous avez créées et dont vous n’avez plus besoin.

Supprimer l’application

Lorsque vous supprimez l’application, le principal de service dans votre locataire est également supprimé. La requête retourne un code de réponse 204 No Content .

DELETE https://graph.microsoft.com/v1.0/applications/b7308000-8bb3-467b-bfc7-8dbbfd759ad9

Supprimer le compte d’utilisateur de test

La requête retourne un code de réponse 204 No Content .

DELETE https://graph.microsoft.com/v1.0/users/59bb3898-0621-4414-ac61-74f9d7201355

Supprimer la stratégie de mappage de revendications

La requête retourne un code de réponse 204 No Content .

DELETE https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/a4b35718-fd5e-4ca8-8248-a3c9934b1b78