Partilhar via


Configurar o logon único baseado em SAML para seu aplicativo usando o Microsoft Graph

O SSO (logon único) é um método de autenticação que permite que os usuários entrem em um aplicativo e acessem vários aplicativos sem precisar entrar novamente. Microsoft Entra dá suporte a vários métodos SSO, incluindo OpenID Connect, OAuth, SAML (Security Assertion Markup Language), baseado em senha e SSO vinculado. Usando o Microsoft Graph, você pode automatizar a configuração do SSO para seu aplicativo.

Neste tutorial, você aprende a:

  • Identificar aplicativos baseados em SAML na galeria Microsoft Entra e configurar o SSO baseado em SAML para um aplicativo
  • Adicionar funções de aplicativo a um aplicativo e concedê-las aos usuários
  • Configurar declarações para emitir no token SAML
  • Configurar um certificado para SSO federado
  • Recuperar os metadados SAML Microsoft Entra ID para seu aplicativo que você usa para concluir a integração

Pré-requisitos

  • Entre em um cliente de API, como o Graph Explorer como um usuário com função de Administrador de Aplicativos na Nuvem em seu locatário Microsoft Entra.
  • Conceda a si mesmo as seguintes permissões delegadas: Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All, Policy.Read.All, , Policy.ReadWrite.ApplicationConfiguratione User.ReadWrite.All.
  • Tenha um usuário de teste para atribuir ao aplicativo.

Etapa 1: identificar o aplicativo para configurar

Microsoft Entra ID tem uma galeria que contém milhares de aplicativos pré-integrados que você pode usar como modelo para seu aplicativo. No Microsoft Graph, essa lista está disponível por meio da entidade applicationTemplate .

Nesta etapa, você identifica o modelo de aplicativo do AWS IAM Identity Center (successor to AWS Single Sign-On) aplicativo que deseja configurar. Registre sua ID.

Solicitação

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

Resposta

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

Etapa 2: Instanciar o aplicativo

Usando o valor de ID para o modelo de aplicativo, crie uma instância do aplicativo em seu locatário. Aqui, você nomeia o aplicativo AWS Contoso. A resposta inclui um objeto de entidade de serviço e aplicativo para a AWS Contoso, que é uma instância do aplicativo AWS IAM Identity Center (sucessor do Logon Único do AWS ). Registre as IDs dos dois objetos para uso posteriormente neste tutorial.

Solicitação

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

{
  "displayName": "AWS Contoso"
}

Resposta

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

Etapa 3: configurar o logon único

Nesta etapa, você configura o SSO para o aplicativo AWS Contoso e a entidade de serviço. Para o aplicativo, você configura as URLs SAML enquanto para a entidade de serviço, você define o modo SSO como saml.

Etapa 3.1: definir o modo de logon único para a entidade de serviço

Defina saml como o modo SSO para a entidade de serviço que você criou na Etapa 2. A solicitação retorna o código de resposta 204 No Content.

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

{
  "preferredSingleSignOnMode": "saml"
}

Etapa 3.2: definir URLs saml básicas para o aplicativo

Nesta etapa, defina oredirecionamento webUris/e/o web redirectUris para o aplicativo criado na Etapa 2. A solicitação retorna o código de resposta 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"
        ]
    }
}

Etapa 4: Adicionar funções de aplicativo

Se o aplicativo exigir as informações da função no token, adicione a definição das funções no objeto do aplicativo. Por padrão, o objeto appRoles no aplicativo e na entidade de serviço na Etapa 2 incluiu o padrão User e msiam_access as funções. Não modifique ou remova-os. Para adicionar funções de modo, você deve incluir as funções existentes e as novas funções no objeto appRoles na solicitação, caso contrário, as funções existentes serão substituídas.

Nesta etapa, adicione as Finance,WAAD funções e Admin,WAAD à entidade de serviço AWS Contoso. A solicitação retorna o código de resposta 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"
        }
    ]
}

Etapa 5: Configurar mapeamento de declarações

Você deseja configurar os atributos SAML mapeando os campos Microsoft Entra ID com atributos específicos do aplicativo do AWS IAM Identity Center. Portanto, você cria uma política de mapeamento de declarações e atribua-a à entidade de serviço.

Etapa 5.1: Criar uma política de mapeamento de declarações

Além das declarações básicas, configure as seguintes declarações para Microsoft Entra ID emitir no token SAML:

Nome da declaração Origem
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

Observação

Algumas chaves na política de mapeamento de declarações, como Versão, são sensíveis a casos. A mensagem de erro "Propriedade tem um valor inválido" pode ser um problema de confidencialidade de caso.

Crie a política de mapeamento de declarações e registre sua ID para uso posteriormente neste tutorial.

Solicitação

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
}

Resposta

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
}

Etapa 5.2: Atribuir a política de mapeamento de declarações à entidade de serviço

A solicitação retorna o código de resposta 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"
}

Etapa 6: configurar um certificado de assinatura

Você precisa de um certificado que Microsoft Entra ID pode usar para assinar uma resposta SAML. Você pode usar o /addTokenSigningCertificate ponto de extremidade para criar um certificado de assinatura de token para a entidade de serviço. Como alternativa, você pode criar um certificado autoassinado e carregá-lo na entidade de serviço.

Depois de adicionar o certificado, a entidade de serviço contém dois objetos na coleção keyCredentials : um para a chave privada e outro para a chave pública; e um objeto na coleção passwordCredentials para a senha do certificado.

Opção 1: criar um certificado de assinatura de token para a entidade de serviço

Solicitação

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

Resposta

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

Opção 2: criar um certificado de assinatura personalizado

Você pode usar os seguintes scripts do PowerShell e do C# para obter um certificado autoassinado para teste. Use as melhores práticas de segurança da sua empresa para criar um certificado de assinatura para produção.

O script a seguir cria um certificado autoassinado com o nome que você fornece fqdn quando solicitado, por exemplo, CN=AWSContoso. Ele protege o certificado com a senha fornecida pwd e exporta os certificados PFX e CER para o local especificado em 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

Extrair detalhes do certificado

Na etapa anterior, você tem os certificados CER e PFX. Extraia os valores da chave privada, senha, chave pública e a impressão digital do certificado a ser adicionada à entidade de serviço.

Extrair a impressão digital do certificado
Solicitação

O script do PowerShell a seguir permite extrair a impressão digital do arquivo CER. Substitua o caminho do arquivo pelo local do certificado.

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

O arquivo CN=AWSContoso.cer.thumbprint.txt tem uma entrada semelhante à saída a seguir.

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A  CN=AWSContoso        {Client Authentication, Server Authentication}
Extrair a chave de certificado

O script do PowerShell a seguir permite extrair a chave pública do arquivo CER. Substitua o caminho do arquivo pelo local do certificado.

Solicitação
[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"
Resposta

O arquivo CN=AWSContoso.cer.key.txt tem um valor codificado base64 semelhante à saída truncada a seguir.

MIIDHjCCAgagAwIBAgIQYDbahiL7NY...6qCMVJKHAQGzGwg==

Adicionar a chave de assinatura personalizada

Adicione os detalhes a seguir à chaveCredentials e passwordCredentials para a entidade de serviço. Quando os dois objetos tiverem as mesmas propriedades, você deve atribuir os mesmos valores para essas propriedades.

  • O customKeyIdentifier é o hash de impressão digital do certificado.
  • O startDateTime é a data em que ou após a criação do certificado.
  • O endDateTime pode ser no máximo três anos a partir do startDateTime. Se não for especificado, o sistema atribui automaticamente uma data um ano após o startDateTime.
  • O tipo e o uso devem ser:
    • AsymmetricX509Cert e Verify , respectivamente, no mesmo objeto.
    • X509CertAndPassword e Sign , respectivamente, no mesmo objeto.
  • Atribua o nome da entidade de certificado à propriedade displayName .
  • A chave é o valor codificado base64 que você gerou na etapa anterior.
  • O keyId é um GUID que você pode definir.

A solicitação retorna o código de resposta 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"
        }
    ]
}

Adicionar a chave de assinatura personalizada

Você precisa definir a propriedade preferredTokenSigningKeyThumbprint da entidade de serviço para a impressão digital do certificado que você deseja que Microsoft Entra ID use para assinar a resposta SAML. A solicitação retorna o código de resposta 204 No Content.

Solicitação

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

{
    "preferredTokenSigningKeyThumbprint": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A"
}

Etapa 7: Atribuir usuários ao aplicativo

Atribuir um usuário ao aplicativo

Atribua o usuário que você criou à entidade de serviço e conceda-lhes a função de Admin,WAAD aplicativo. No corpo da solicitação, forneça os seguintes valores:

  • principalId – A ID da conta de usuário que você criou.
  • appRoleId – A ID da Admin,WAAD função de aplicativo que você adicionou.
  • resourceId – A ID da entidade de serviço.

Solicitação

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

Resposta

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

Etapa 8: Obter metadados SAML Microsoft Entra ID para o aplicativo AWS Contoso

Use a URL a seguir para obter os metadados SAML Microsoft Entra ID para o aplicativo AWS Contoso. Substitua {tenant-id} pela ID do locatário e {appId} pelo appId do aplicativo AWS Contoso. Os metadados contêm informações como o certificado de assinatura, Microsoft Entra entityID e Microsoft Entra SingleSignOnService, entre outros.

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

O seguinte mostra um exemplo do que você pode ver para seu aplicativo. Salve os dados no formato 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>

Etapa 9: concluir e testar a integração

Agora que você concluiu as etapas de configuração do aplicativo em Microsoft Entra ID e tem os metadados SAML, entre no site da empresa do Centro de Identidade IAM do AWS como administrador e:

  1. Conclua as etapas para configurar o SSO do Centro de Identidade IAM do AWS.
  2. Crie um usuário de teste cujo nome de usuário e endereço de email correspondam à conta de usuário que você criou em Microsoft Entra ID.
  3. Teste a integração do SSO.

Etapa 10: Limpar recursos

Nesta etapa, remova os recursos que você criou e não precisa mais.

Excluir o aplicativo

Quando você exclui o aplicativo, a entidade de serviço em seu locatário também é excluída. A solicitação retorna o código de resposta 204 No Content.

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

Excluir a conta de usuário de teste

A solicitação retorna o código de resposta 204 No Content.

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

Excluir a política de mapeamento de declarações

A solicitação retorna o código de resposta 204 No Content.

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