Konfigurieren des SAML-basierten einmaligen Anmeldens für Ihre Anwendung mithilfe von Microsoft Graph

Einmaliges Anmelden (Single Sign-On, SSO) ist eine Authentifizierungsmethode, mit der sich Benutzer bei einer Anwendung anmelden und dann auf mehrere Anwendungen zugreifen können, ohne sich erneut anmelden zu müssen. Microsoft Entra unterstützt verschiedene SSO-Methoden, einschließlich OpenID Connect, OAuth, Security Assertion Markup Language (SAML), kennwortbasiertes und verknüpftes einmaliges Anmelden. Mithilfe von Microsoft Graph können Sie die Konfiguration des einmaligen Anmeldens für Ihre Anwendung automatisieren.

In diesem Tutorial wird Folgendes vermittelt:

  • Identifizieren von SAML-basierten Apps im Microsoft Entra-Katalog und Konfigurieren des SAML-basierten einmaligen Anmeldens für eine App
  • Hinzufügen von App-Rollen zu einer Anwendung und Zuweisen dieser Rollen für Benutzer
  • Konfigurieren von Ansprüchen, die im SAML-Token ausgegeben werden sollen
  • Konfigurieren eines Zertifikats für verbundbasiertes einmaliges Anmelden
  • Abrufen der Microsoft Entra ID SAML-Metadaten für Ihre Anwendung, die Sie zum Abschließen der Integration verwenden

Voraussetzungen

  • Melden Sie sich bei einem API-Client wie Graph Explorer als Benutzer mit der Rolle Cloudanwendungsadministrator in Ihrem Microsoft Entra Mandanten an.
  • Gewähren Sie sich die folgenden delegierten Berechtigungen: Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All, Policy.Read.All, Policy.ReadWrite.ApplicationConfigurationund User.ReadWrite.All.
  • Lassen Sie einen Testbenutzer der Anwendung zuweisen.

Schritt 1: Identifizieren der zu konfigurierenden Anwendung

Microsoft Entra ID verfügt über einen Katalog, der Tausende von vorintegrierten Anwendungen enthält, die Sie als Vorlage für Ihre Anwendung verwenden können. In Microsoft Graph ist diese Liste über die ApplicationTemplate-Entität verfügbar.

In diesem Schritt identifizieren Sie die Anwendungsvorlage für die AWS IAM Identity Center (successor to AWS Single Sign-On) Anwendung, die Sie konfigurieren möchten. Notieren Sie sich die ID.

Anforderung

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

Antwort

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."
        }
    ]
}

Schritt 2: Instanziieren der Anwendung

Erstellen Sie mithilfe des Id-Werts für die Anwendungsvorlage eine instance der Anwendung in Ihrem Mandanten. Hier nennen Sie die Anwendung AWS Contoso. Die Antwort enthält ein Anwendungs- und Dienstprinzipalobjekt für AWS Contoso, bei dem es sich um eine instance der AWS IAM Identity Center-App (Nachfolger von AWS Single Sign-On) handelt. Notieren Sie sich die IDs der beiden Objekte zur späteren Verwendung in diesem Tutorial.

Anforderung

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

{
  "displayName": "AWS Contoso"
}

Antwort

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
        }
    }
}

Schritt 3: Konfigurieren des einmaligen Anmeldens

In diesem Schritt konfigurieren Sie einmaliges Anmelden sowohl für die AWS Contoso-Anwendung als auch für den Dienstprinzipal. Für die Anwendung konfigurieren Sie die SAML-URLs, während Sie für den Dienstprinzipal den SSO-Modus auf samlfestlegen.

Schritt 3.1: Festlegen des Modus für einmaliges Anmelden für den Dienstprinzipal

Legen Sie saml als SSO-Modus für den Dienstprinzipal fest, den Sie in Schritt 2 erstellt haben. Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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

{
  "preferredSingleSignOnMode": "saml"
}

Schritt 3.2: Festlegen grundlegender SAML-URLs für die Anwendung

Legen Sie in diesem Schritt die Web/redirectUris und web/redirectUris für die Anwendung fest, die Sie in Schritt 2 erstellt haben. Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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"
        ]
    }
}

Schritt 4: Hinzufügen von App-Rollen

Wenn die Anwendung die Rolleninformationen im Token erfordert, fügen Sie die Definition der Rollen im „application“-Objekt hinzu. Standardmäßig enthielt das appRoles-Objekt in der Anwendung und dem Dienstprinzipal in Schritt 2 die Standardrollen User und msiam_access . Ändern oder entfernen Sie sie nicht. Um Modusrollen hinzuzufügen, müssen Sie sowohl die vorhandenen Rollen als auch die neuen Rollen in das appRoles-Objekt in der Anforderung einschließen. Andernfalls werden die vorhandenen Rollen ersetzt.

Fügen Sie in diesem Schritt die Finance,WAAD Rollen und Admin,WAAD dem AWS Contoso-Dienstprinzipal hinzu. Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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"
        }
    ]
}

Schritt 5: Konfigurieren der Anspruchszuordnung

Sie möchten die SAML-Attribute konfigurieren, indem Sie die Microsoft Entra ID Feldern bestimmten AWS IAM Identity Center-Anwendungsattributen zuordnen. Daher erstellen Sie eine Anspruchszuordnungsrichtlinie und weisen sie dem Dienstprinzipal zu.

Schritt 5.1: Erstellen einer Anspruchszuordnungsrichtlinie

Konfigurieren Sie zusätzlich zu den grundlegenden Ansprüchen die folgenden Ansprüche für Microsoft Entra ID, die im SAML-Token ausgegeben werden sollen:

Anspruchsname Quelle
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

Hinweis

Bei einigen Schlüsseln in der Anspruchszuordnungsrichtlinie, z. B. Version, wird die Groß-/Kleinschreibung beachtet. Die Fehlermeldung "Property has an invalid value" (Eigenschaft hat einen ungültigen Wert) kann ein Problem mit der Unterscheidung nach Groß-/Kleinschreibung sein.

Erstellen Sie die Anspruchszuordnungsrichtlinie, und notieren Sie ihre ID zur späteren Verwendung in diesem Tutorial.

Anforderung

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
}

Antwort

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
}

Schritt 5.2: Zuweisen der Anspruchszuordnungsrichtlinie zum Dienstprinzipal

Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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"
}

Schritt 6: Konfigurieren eines Signaturzertifikats

Sie benötigen ein Zertifikat, das Microsoft Entra ID zum Signieren einer SAML-Antwort verwenden können. Sie können den /addTokenSigningCertificate Endpunkt verwenden, um ein Tokensignaturzertifikat für den Dienstprinzipal zu erstellen. Alternativ können Sie ein selbstsigniertes Zertifikat erstellen und in den Dienstprinzipal hochladen.

Nachdem Sie das Zertifikat hinzugefügt haben, enthält der Dienstprinzipal zwei Objekte in der keyCredentials-Auflistung : eines für den privaten Schlüssel und eines für den öffentlichen Schlüssel. und ein -Objekt in der passwordCredentials-Auflistung für das Zertifikatkennwort .

Option 1: Erstellen eines Tokensignaturzertifikats für den Dienstprinzipal

Anforderung

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"
}

Antwort

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: Erstellen eines benutzerdefinierten Signaturzertifikats

Sie können die folgenden PowerShell- und C#-Skripts verwenden, um ein selbstsigniertes Zertifikat zum Testen abzurufen. Verwenden Sie die bewährten Sicherheitsmethoden Ihres Unternehmens, um ein Signaturzertifikat für die Produktion zu erstellen.

Das folgende Skript erstellt ein selbstsigniertes Zertifikat mit dem Namen, CN=AWSContosoden Sie angeben, wenn Sie fqdn dazu aufgefordert werden, z. B. . Es schützt das Zertifikat mit dem Kennwort, das Sie in pwd angeben, und exportiert die PFX- und CER-Zertifikate an den Speicherort, den Sie in locationangeben.

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

Extrahieren von Zertifikatdetails

Im vorherigen Schritt verfügen Sie über die CER- und PFX-Zertifikate. Extrahieren Sie die Werte für den privaten Schlüssel, das Kennwort, den öffentlichen Schlüssel und den Zertifikatfingerabdruck, die dem Dienstprinzipal hinzugefügt werden sollen.

Extrahieren des Zertifikatfingerabdrucks
Anforderung

Mit dem folgenden PowerShell-Skript können Sie den Fingerabdruck aus der CER-Datei extrahieren. Ersetzen Sie den Dateipfad durch den Speicherort Ihres Zertifikats.

## 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"
Antwort

Die CN=AWSContoso.cer.thumbprint.txt Datei weist einen Eintrag auf, der der folgenden Ausgabe ähnelt.

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A  CN=AWSContoso        {Client Authentication, Server Authentication}
Extrahieren des Zertifikatschlüssels

Mit dem folgenden PowerShell-Skript können Sie den öffentlichen Schlüssel aus der CER-Datei extrahieren. Ersetzen Sie den Dateipfad durch den Speicherort Ihres Zertifikats.

Anforderung
[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"
Antwort

Die CN=AWSContoso.cer.key.txt-Datei weist einen Base64-codierten Wert auf, der der folgenden abgeschnittenen Ausgabe ähnelt.

MIIDHjCCAgagAwIBAgIQYDbahiL7NY...6qCMVJKHAQGzGwg==

Hinzufügen des benutzerdefinierten Signaturschlüssels

Fügen Sie die folgenden Details zu keyCredentials und passwordCredentials für den Dienstprinzipal hinzu. Wenn die beiden Objekte über dieselben Eigenschaften verfügen, müssen Sie diesen Eigenschaften dieselben Werte zuweisen.

  • CustomKeyIdentifier ist der Zertifikatfingerabdruck-Hash.
  • StartDateTime ist das Datum, an dem oder nachdem das Zertifikat erstellt wurde.
  • EndDateTime kann maximal drei Jahre ab startDateTime sein. Wenn keine Angabe erfolgt, weist das System automatisch ein Datum ein Jahr nach startDateTime zu.
  • Der Typ und die Verwendung müssen wie folgt sein:
    • AsymmetricX509Cert bzw Verify . im selben Objekt.
    • X509CertAndPassword bzw Sign . im selben Objekt.
  • Weisen Sie den Zertifikatantragstellernamen der displayName-Eigenschaft zu.
  • Der Schlüssel ist der Base64-codierte Wert, den Sie im vorherigen Schritt generiert haben.
  • Die keyId ist eine GUID, die Sie definieren können.

Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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"
        }
    ]
}

Aktivieren des benutzerdefinierten Signierschlüssels

Sie müssen die preferredTokenSigningKeyThumbprint-Eigenschaft des Dienstprinzipals auf den Fingerabdruck des Zertifikats festlegen, das Microsoft Entra ID zum Signieren der SAML-Antwort verwenden soll. Die Anforderung gibt einen 204 No Content Antwortcode zurück.

Anforderung

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

{
    "preferredTokenSigningKeyThumbprint": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A"
}

Schritt 7: Zuweisen von Benutzern zur Anwendung

Zuweisen eines Benutzers zur Anwendung

Weisen Sie dem Dienstprinzipal den benutzer zu, den Sie erstellt haben, und weisen Sie ihm die Admin,WAAD App-Rolle zu. Geben Sie im Anforderungstext die folgenden Werte an:

  • principalId : Die ID des Benutzerkontos, das Sie erstellt haben.
  • appRoleId : Die ID der App-Rolle Admin,WAAD , die Sie hinzugefügt haben.
  • resourceId : Die ID des Dienstprinzipals.

Anforderung

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"
}

Antwort

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"
}

Schritt 8: Abrufen Microsoft Entra ID SAML-Metadaten für die AWS Contoso-App

Verwenden Sie die folgende URL, um die Microsoft Entra ID SAML-Metadaten für die AWS Contoso-App abzurufen. Ersetzen Sie durch {tenant-id} die Mandanten-ID und {appId} durch die appId der AWS Contoso-App. Die Metadaten enthalten unter anderem Informationen wie das Signaturzertifikat, Microsoft Entra entityID und Microsoft Entra SingleSignOnService.

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

Im Folgenden finden Sie ein Beispiel dafür, was Für Ihre Anwendung möglicherweise angezeigt wird. Speichern Sie die Daten im XML-Format.

<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>

Schritt 9: Abschließen und Testen der Integration

Nachdem Sie nun die Konfigurationsschritte für die Anwendung in Microsoft Entra ID abgeschlossen haben und über die SAML-Metadaten verfügen, melden Sie sich bei Ihrer AWS IAM Identity Center-Unternehmenswebsite als Administrator an.

  1. Führen Sie die Schritte zum Konfigurieren des einmaligen Anmeldens für AWS IAM Identity Center aus.
  2. Erstellen Sie einen Testbenutzer, dessen Benutzername und E-Mail-Adresse mit dem Benutzerkonto übereinstimmen, das Sie in Microsoft Entra ID erstellt haben.
  3. Testen Sie die SSO-Integration.

Schritt 10: Bereinigen von Ressourcen

Entfernen Sie in diesem Schritt die Ressourcen, die Sie erstellt haben und nicht mehr benötigen.

Löschen der Anwendung

Wenn Sie die Anwendung löschen, wird auch der Dienstprinzipal in Ihrem Mandanten gelöscht. Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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

Löschen des Testbenutzerkontos

Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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

Löschen einer Anspruchszuordnungsrichtlinie

Die Anforderung gibt einen 204 No Content Antwortcode zurück.

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