Configuración del inicio de sesión único basado en SAML para la aplicación mediante Microsoft Graph

El inicio de sesión único (SSO) es un método de autenticación que permite a los usuarios iniciar sesión en una aplicación y, a continuación, acceder a varias aplicaciones sin necesidad de volver a iniciar sesión. Microsoft Entra admite varios métodos de SSO, como OpenID Connect, OAuth, Lenguaje de marcado de aserción de seguridad (SAML), sso vinculado y basado en contraseñas. Con Microsoft Graph, puede automatizar la configuración del inicio de sesión único para la aplicación.

En este tutorial, aprenderá a:

  • Identificación de aplicaciones basadas en SAML en la galería de Microsoft Entra y configuración del inicio de sesión único basado en SAML para una aplicación
  • Agregar roles de aplicación a una aplicación y concederlos a los usuarios
  • Configuración de notificaciones para emitir en el token saml
  • Configuración de un certificado para el inicio de sesión único federado
  • Recuperación de los metadatos saml de Microsoft Entra ID para la aplicación que se usan para completar la integración

Requisitos previos

  • Inicie sesión en un cliente de API, como Graph Explorer , como un usuario con el rol Administrador de aplicaciones en la nube en el inquilino de Microsoft Entra.
  • Concédese los siguientes permisos delegados: Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All, Policy.Read.All, Policy.ReadWrite.ApplicationConfigurationy User.ReadWrite.All.
  • Hacer que un usuario de prueba se asigne a la aplicación.

Paso 1: Identificar la aplicación que se va a configurar

Microsoft Entra ID tiene una galería que contiene miles de aplicaciones preintegradas que puede usar como plantilla para la aplicación. En Microsoft Graph, esta lista está disponible a través de la entidad applicationTemplate .

En este paso, identificará la plantilla de aplicación para la AWS IAM Identity Center (successor to AWS Single Sign-On) aplicación que desea configurar. Registre su identificador.

Solicitud

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

Respuesta

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

Paso 2: Crear una instancia de la aplicación

Con el valor id de la plantilla de aplicación, cree una instancia de la aplicación en el inquilino. Aquí, asigne a la aplicación el nombre AWS Contoso. La respuesta incluye un objeto de aplicación y entidad de servicio para AWS Contoso, que es una instancia de la aplicación AWS IAM Identity Center (sucesora del inicio de sesión único de AWS). Registre los identificadores de los dos objetos para usarlos más adelante en este tutorial.

Solicitud

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

{
  "displayName": "AWS Contoso"
}

Respuesta

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

Paso 3: Configuración del inicio de sesión único

En este paso, configurará el inicio de sesión único para la aplicación de AWS Contoso y la entidad de servicio. Para la aplicación, configure las direcciones URL de SAML mientras que para la entidad de servicio, establezca el modo sso en saml.

Paso 3.1: Establecer el modo de inicio de sesión único para la entidad de servicio

Establezca saml como modo sso para la entidad de servicio que creó en el paso 2. La solicitud devuelve un código de respuesta 204 No Content.

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

{
  "preferredSingleSignOnMode": "saml"
}

Paso 3.2: Establecimiento de direcciones URL básicas de SAML para la aplicación

En este paso, establezcaredirectUrisweb/ yredirectUrisweb/ para la aplicación que creó en el paso 2. La solicitud devuelve un código de respuesta 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"
        ]
    }
}

Paso 4: Agregar roles de aplicación

Si la aplicación requiere la información del rol en el token, agregue la definición de los roles en el objeto de aplicación. De forma predeterminada, el objeto appRoles de la aplicación y la entidad de servicio del paso 2 incluía los roles predeterminados User y msiam_access . No las modifique ni las quite. Para agregar más roles, debe incluir los roles existentes y los nuevos roles en el objeto appRoles en la solicitud; de lo contrario, se reemplazan los roles existentes.

En este paso, agregue los Finance,WAAD roles y Admin,WAAD a la entidad de servicio de AWS Contoso. La solicitud devuelve un código de respuesta 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"
        }
    ]
}

Paso 5: Configurar la asignación de notificaciones

Quiere configurar los atributos SAML mediante la asignación de los campos de Microsoft Entra ID con atributos de aplicación específicos de AWS IAM Identity Center. Por lo tanto, cree una directiva de asignación de notificaciones y asígnela a la entidad de servicio.

Paso 5.1: Creación de una directiva de asignación de notificaciones

Además de las notificaciones básicas, configure las siguientes notificaciones para que Microsoft Entra ID emita en el token SAML:

Nombre de la notificación Origen
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

Nota:

Algunas claves de la directiva de asignación de notificaciones, como Versión, distinguen mayúsculas de minúsculas. El mensaje de error "La propiedad tiene un valor no válido" puede ser un problema de distinción entre mayúsculas y minúsculas.

Cree la directiva de asignación de notificaciones y registre su identificador para usarlo más adelante en este tutorial.

Solicitud

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
}

Respuesta

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
}

Paso 5.2: Asignación de la directiva de asignación de notificaciones a la entidad de servicio

La solicitud devuelve un código de respuesta 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"
}

Paso 6: Configurar un certificado de firma

Necesita un certificado que Microsoft Entra ID pueda usar para firmar una respuesta SAML. Puede usar el punto de /addTokenSigningCertificate conexión para crear un certificado de firma de token para la entidad de servicio. Como alternativa, puede crear un certificado autofirmado y cargarlo en la entidad de servicio.

Después de agregar el certificado, la entidad de servicio contiene dos objetos en la colección keyCredentials : uno para la clave privada y otro para la clave pública; y un objeto de la colección passwordCredentials para la contraseña del certificado.

Opción 1: Crear un certificado de firma de token para la entidad de servicio

Solicitud

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

Respuesta

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

Opción 2: Crear un certificado de firma personalizado

Puede usar los siguientes scripts de PowerShell y C# para obtener un certificado autofirmado para las pruebas. Use los procedimientos recomendados de seguridad de su empresa para crear un certificado de firma para producción.

El siguiente script crea un certificado autofirmado con el nombre que se asigna fqdn cuando se le solicita, por ejemplo, CN=AWSContoso. Protege el certificado con la contraseña que proporciona pwd y exporta los certificados PFX y CER a la ubicación especificada en 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

Extracción de detalles del certificado

En el paso anterior, tiene los certificados CER y PFX. Extraiga los valores de la clave privada, la contraseña, la clave pública y la huella digital del certificado para agregarlos a la entidad de servicio.

Extracción de la huella digital del certificado
Solicitud

El siguiente script de PowerShell permite extraer la huella digital del archivo CER. Reemplace la ruta de acceso del archivo por la ubicación del 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"
Respuesta

El archivo CN=AWSContoso.cer.thumbprint.txt tiene una entrada similar a la siguiente salida.

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A  CN=AWSContoso        {Client Authentication, Server Authentication}
Extracción de la clave de certificado

El siguiente script de PowerShell permite extraer la clave pública del archivo CER. Reemplace la ruta de acceso del archivo por la ubicación del certificado.

Solicitud
[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"
Respuesta

El archivo CN=AWSContoso.cer.key.txt tiene un valor codificado en base64 similar a la siguiente salida truncada.

MIIDHjCCAgagAwIBAgIQYDbahiL7NY...6qCMVJKHAQGzGwg==

Agregar la clave de firma personalizada

Agregue los detalles siguientes a keyCredentials y passwordCredentials para la entidad de servicio. Cuando los dos objetos tienen las mismas propiedades, debe asignar los mismos valores para esas propiedades.

  • CustomKeyIdentifier es el hash de huella digital del certificado.
  • StartDateTime es la fecha en que o después de crear el certificado.
  • EndDateTime puede ser un máximo de tres años a partir de startDateTime. Si no se especifica, el sistema asigna automáticamente una fecha un año después de startDateTime.
  • El tipo y el uso deben ser:
    • AsymmetricX509Cert y Verify , respectivamente, en el mismo objeto.
    • X509CertAndPassword y Sign , respectivamente, en el mismo objeto.
  • Asigne el nombre del firmante del certificado a la propiedad displayName .
  • La clave es el valor codificado en Base64 que generó en el paso anterior.
  • KeyId es un GUID que puede definir.

La solicitud devuelve un código de respuesta 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"
        }
    ]
}

Activar la clave de firma personalizada

Debe establecer la propiedad preferredTokenSigningKeyThumbprint de la entidad de servicio en la huella digital del certificado que desea que use Microsoft Entra ID para firmar la respuesta saml. La solicitud devuelve un código de respuesta 204 No Content.

Solicitud

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

{
    "preferredTokenSigningKeyThumbprint": "5214D6BA9438F984A0CC2C856CCEA6A76EDCEC3A"
}

Paso 7: Asignación de usuarios a la aplicación

Asignar un usuario a la aplicación

Asigne el usuario que creó a la entidad de servicio y concédale el Admin,WAAD rol de aplicación. En el cuerpo de la solicitud, proporcione los siguientes valores:

  • principalId : el identificador de la cuenta de usuario que creó.
  • appRoleId : el identificador del Admin,WAAD rol de aplicación que agregó.
  • resourceId : el identificador de la entidad de servicio.

Solicitud

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

Respuesta

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

Paso 8: Obtención de metadatos SAML de Microsoft Entra ID para la aplicación AWS Contoso

Use la siguiente dirección URL para obtener los metadatos saml de Microsoft Entra ID para la aplicación AWS Contoso. Reemplace por {tenant-id} el identificador de inquilino y {appId} por el appId de la aplicación de AWS Contoso. Los metadatos contienen información como el certificado de firma, Microsoft Entra entityID y Microsoft Entra SingleSignOnService, entre otros.

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

A continuación se muestra un ejemplo de lo que puede ver para la aplicación. Guarde los datos en 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>

Paso 9: Completar y probar la integración

Ahora que ha completado los pasos de configuración de la aplicación en Microsoft Entra ID y tiene los metadatos saml, inicie sesión en el sitio de la empresa de AWS IAM Identity Center como administrador y:

  1. Complete los pasos para configurar el inicio de sesión único de AWS IAM Identity Center.
  2. Cree un usuario de prueba cuyo nombre de usuario y dirección de correo electrónico coincidan con la cuenta de usuario que creó en Microsoft Entra ID.
  3. Pruebe la integración del inicio de sesión único.

Paso 10: Limpieza de recursos

En este paso, quite los recursos que ha creado y que ya no necesitan.

Eliminar la aplicación

Al eliminar la aplicación, también se elimina la entidad de servicio del inquilino. La solicitud devuelve un código de respuesta 204 No Content.

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

Eliminación de la cuenta de usuario de prueba

La solicitud devuelve un código de respuesta 204 No Content.

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

Eliminar la directiva de asignación de notificaciones

La solicitud devuelve un código de respuesta 204 No Content.

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