Automatizar la configuración de la aplicación SSO (inicio de sesión único) basada en SAML con la API de Microsoft GraphAutomate SAML-based SSO app configuration with Microsoft Graph API

En este artículo, obtendrá información sobre cómo crear y configurar una aplicación de la galería de Azure Active Directory (Azure AD).In this article, you'll learn how to create and configure an application from the Azure Active Directory (Azure AD) Gallery. Este artículo usa AWS como ejemplo, pero puede usar los pasos de este artículo para cualquier aplicación basada en SAML en la galería de Azure AD.This article uses AWS as an example, but you can use the steps in this article for any SAML-based app in the Azure AD Gallery.

Pasos para usar las API de Microsoft Graph para automatizar la configuración del inicio de sesión único basado en SAMLSteps to use Microsoft Graph APIs to automate configuration of SAML-based single sign-on

PasoStep DetallesDetails
1. Crear la aplicación de la galería1. Create the gallery application Iniciar sesión en el cliente APISign in to the API client
Recuperar la aplicación de la galeríaRetrieve the gallery application
Crear la aplicación de la galeríaCreate the gallery application
2. Configurar el inicio de sesión único2. Configure single sign-on Recuperar Id. de objeto de aplicación e Id. de objeto de entidad de servicioRetrieve app object ID and service principal object ID
Configurar el modo de inicio de sesión únicoSet single sign-on mode
Establecer direcciones URL de SAML básicas como identificador, URL de respuesta y URL de inicio de sesiónSet basic SAML URLs such as identifier, reply URL, sign-on URL
Agregar roles de aplicación (opcional)Add app roles (Optional)
3. Configurar la asignación de notificaciones3. Configure claims mapping Crear directiva de asignación de notificacionesCreate claims mapping policy
Asignar directiva de asignación de notificaciones a entidad de servicioAssign claims mapping policy to service principal
4. Configurar el certificado de firma4. Configure signing certificate Crear un certificadoCreate a certificate
Agregar una clave de firma personalizadaAdd a custom signing key
Activar la clave de firma personalizadaActivate the custom signing key
5. Asignar usuarios5. Assign users Asignar usuarios y grupos a la aplicaciónAssign users and groups to the application
6. Configurar el lado de la aplicación6. Configure the application side Obtener los metadatos SAML de Azure ADGet Azure AD SAML metadata

Lista de todas las API usadas en el artículoList of all APIs used in the article

Asegúrese de tener los permisos correspondientes para llamar a las siguientes API.Make sure you have the corresponding permissions to call the following APIs.

Tipo de recursoResource type MétodoMethod
applicationTemplateapplicationTemplate Enumerar applicationTemplateList applicationTemplate
Generar una instancia de applicationTemplateInstantiate applicationTemplate
servicePrincipalsservicePrincipals Actualizar servicePrincipalUpdate servicePrincipal
Crear appRoleAssignmentsCreate appRoleAssignments
Assign claimsMappingPoliciesAssign claimsMappingPolicies
applicationsapplications Update applicationUpdate application
claimsMappingPolicyclaimsMappingPolicy Create claimsMappingPolicyCreate claimsMappingPolicy

Nota

Es posible que los objetos de respuesta que aparecen en este artículo se abrevien para facilitar la lectura.The response objects shown in this article might be shortened for readability. Se devolverán todas las propiedades de una llamada real.All the properties will be returned from an actual call.

  1. Inicie el Explorador de Microsoft GraphStart Microsoft Graph Explorer.
  2. Seleccione Inicio de sesión con Microsoft e inicie sesión con las credenciales de administrador de aplicaciones o de administrador global de Azure AD.Select Sign-In with Microsoft and sign in using an Azure AD global administrator or App Admin credentials.
  3. Una vez que haya iniciado sesión correctamente, verá los detalles de la cuenta de usuario en el panel izquierdo.Upon successful sign-in, you'll see the user account details in the left-hand pane.

Todas las aplicaciones de la galería de la aplicación de Azure AD tienen una plantilla de aplicación que describe los metadatos de la aplicación.Applications in the Azure AD application gallery each have an application template that describes the metadata for that application. Con esta plantilla, puede crear una instancia de la aplicación y de la entidad de servicio en su inquilino para administrarlas.Using this template, you can create an instance of the application and service principal in your tenant for management.

SolicitudRequest

GET https://graph.microsoft.com/beta/applicationTemplates

RespuestaResponse

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

{
  "value": [
  {
    "id": "8b1025e4-1dd2-430b-a150-2ef79cd700f5",
        "displayName": "Amazon Web Services (AWS)",
        "homePageUrl": "http://aws.amazon.com/",
        "supportedSingleSignOnModes": [
             "password",
             "saml",
             "external"
         ],
         "supportedProvisioningTypes": [
             "sync"
         ],
         "logoUrl": "https://az495088.vo.msecnd.net/app-logo/aws_215.png",
         "categories": [
             "developerServices"
         ],
         "publisher": "Amazon",
         "description": null    
  
}

Con el Id. de plantilla que ha recuperado para la aplicación en el último paso, cree una instancia de la aplicación y de la entidad de servicio en su inquilino.Using the template ID that you retrieved for your application in the last step, create an instance of the application and service principal in your tenant.

Nota

Puede usar applicationTemplate API para generar instancias de aplicaciones situadas fuera de la Galería.You can use applicationTemplate API to instantiate Non-Gallery apps. Utilice applicationTemplateId 8adf8e6e-67b2-4cf2-a259-e3dc5476c621.Use applicationTemplateId 8adf8e6e-67b2-4cf2-a259-e3dc5476c621.

Nota

Dé un margen de tiempo para que se aprovisione la aplicación en su inquilino de Azure AD.Allow some time for the app to be provisioned into your Azure AD tenant. No sucede de manera instantánea.It is not instant. Una estrategia puede ser realizar una consulta GET en la aplicación o en el objeto de la entidad de servicio cada 5-10 segundos hasta que la consulta se realice correctamente.One strategy is to do a GET query on the application / service principal object every 5-10 seconds until the query is successful.

SolicitudRequest

POST https://graph.microsoft.com/beta/applicationTemplates/8b1025e4-1dd2-430b-a150-2ef79cd700f5/instantiate
Content-type: application/json

{
  "displayName": "AWS Contoso"
}

RespuestaResponse

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


{
    "application": {
        "objectId": "cbc071a6-0fa5-4859-8g55-e983ef63df63",
        "appId": "92653dd4-aa3a-3323-80cf-e8cfefcc8d5d",
        "applicationTemplateId": "8b1025e4-1dd2-430b-a150-2ef79cd700f5",
        "displayName": "AWS Contoso",
        "homepage": "https://signin.aws.amazon.com/saml?metadata=aws|ISV9.1|primary|z",
        "replyUrls": [
            "https://signin.aws.amazon.com/saml"
        ],
        "logoutUrl": null,
        "samlMetadataUrl": null,
    },
    "servicePrincipal": {
        "objectId": "f47a6776-bca7-4f2e-bc6c-eec59d058e3e",
        "appDisplayName": "AWS Contoso",
        "applicationTemplateId": "8b1025e4-1dd2-430b-a150-2ef79cd700f5",
        "appRoleAssignmentRequired": true,
        "displayName": "My custom name",
        "homepage": "https://signin.aws.amazon.com/saml?metadata=aws|ISV9.1|primary|z",
        "replyUrls": [
            "https://signin.aws.amazon.com/saml"
        ],
        "servicePrincipalNames": [
            "93653dd4-aa3a-4323-80cf-e8cfefcc8d7d"
        ],
        "tags": [
            "WindowsAzureActiveDirectoryIntegratedApp"
        ],
    }
}

Paso 2: Configurar el inicio de sesión únicoStep 2: Configure single sign-on

Recuperar Id. de objeto de aplicación e Id. de objeto de entidad de servicioRetrieve app object ID and service principal object ID

Utilice la respuesta de la llamada anterior para recuperar y guardar el Id. de objeto de aplicación y el Id. de objeto de entidad de servicio.Use the response from the previous call to retrieve and save the application object ID and service principal object ID.

"application": {
        "objectId": "cbc071a6-0fa5-4859-8g55-e983ef63df63"
}
"servicePrincipal": {
        "objectId": "f47a6776-bca7-4f2e-bc6c-eec59d058e3e"
}

Configurar el modo de inicio de sesión únicoSet single sign-on mode

En este ejemplo, va a establecer saml como el modo de inicio de sesión único en el tipo de recurso servicePrincipal.In this example, you'll set saml as the single sign-on mode in the servicePrincipal resource type. Otras propiedades del SSO (inicio de sesión único) de SAML que se pueden configurar son: notificationEmailAddresses, loginUrl y samlSingleSignOnSettings.relayState.Other SAML SSO properties that you can configure are: notificationEmailAddresses, loginUrl, and samlSingleSignOnSettings.relayState.

Para que esta consulta funcione, tendrá que dar su consentimiento en la pestaña Modificar permisos en el Explorador de Graph.Before this query will work you need to provide consent on the Modify permissions tab in Graph Explorer. Asimismo, asegúrese de que está usando el Id. de servicePrincipal obtenido anteriormente.Also, make sure you are using the servicePrincipal ID that you obtained earlier.

SolicitudRequest

PATCH https://graph.microsoft.com/beta/servicePrincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e
Content-type: servicePrincipal/json

{
    "preferredSingleSignOnMode": "saml"
}

RespuestaResponse

HTTP/1.1 204

Establecer direcciones URL de SAML básicas como identificador, URL de respuesta y URL de inicio de sesiónSet basic SAML URLs such as identifier, reply URL, sign-on URL

Configure el identificador y las direcciones URL de respuesta para AWS en el objeto de aplicación.Set the identifier and reply URLs for AWS in the application object.

Asegúrese de que está usando el Id. de aplicación obtenido anteriormente.Make sure you are using the application id obtained earlier.

SolicitudRequest

PATCH https://graph.microsoft.com/beta/applications/cbc071a6-0fa5-4859-8g55-e983ef63df63
Content-type: applications/json

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

RespuestaResponse

HTTP/1.1 204

Agregar roles de aplicación (opcional)Add app roles (Optional)

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.If the application requires the role information in the token, add the definition of the roles in the application object. Para AWS, puede habilitar el aprovisionamiento de usuarios para obtener todos los roles de esa cuenta de AWS.For AWS, you can enable user provisioning to fetch all the roles from that AWS account.

Para más información, consulte Configurar la notificación de rol emitida en el token SAMLFor more information, see Configure the role claim issued in the SAML token.

Nota

Al agregar roles de aplicación, no modifique los roles de aplicación predeterminados msiam_access.When adding app roles, don't modify the default app roles msiam_access.

SolicitudRequest

PATCH https://graph.microsoft.com/beta/serviceprincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e
Content-type: serviceprincipals/json

{
"appRoles": [
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "msiam_access",
            "displayName": "msiam_access",
            "id": "7dfd756e-8c27-4472-b2b7-38c17fc5de5e",
            "isEnabled": true,
            "origin": "Application",
            "value": null
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Admin,WAAD",
            "displayName": "Admin,WAAD",
            "id": "454dc4c2-8176-498e-99df-8c4efcde41ef",
            "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": "8642d5fa-18a3-4245-ab8c-a96000c1a217",
            "isEnabled": true,
            "value": "arn:aws:iam::212743507312:role/accountname-aws-finance,arn:aws:iam::212743507312:saml-provider/WAAD"
        }
    ]

}

RespuestaResponse

HTTP/1.1 204

Paso 3: Configurar la asignación de notificacionesStep 3: Configure claims mapping

Crear directiva de asignación de notificacionesCreate claims mapping policy

Además de las notificaciones básicas, configure las siguientes notificaciones para que Azure AD las emita en el token SAML:In addition to the basic claims, configure the following claims for Azure AD to emit in the SAML token:

Nombre de la notificaciónClaim name OrigenSource
https://aws.amazon.com/SAML/Attributes/Role assignedrolesassignedroles
https://aws.amazon.com/SAML/Attributes/RoleSessionName userprincipalnameuserprincipalname
https://aws.amazon.com/SAML/Attributes/SessionDuration "900""900"
rolesroles assignedrolesassignedroles
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier userprincipalnameuserprincipalname

Para más información, consulte Personalizar las notificaciones emitidas en token.For more information, see Customize claims emitted in token.

Nota

Algunas claves de la directiva de asignación de notificaciones distinguen entre mayúsculas y minúsculas (por ejemplo, "Versión").Some keys in the claims mapping policy are case sensitive (for example, "Version"). Si recibe un mensaje de error como "La propiedad tiene un valor no válido", puede deberse a la diferenciación entre mayúsculas y minúsculas.If you receive an error message such as "Property has an invalid value", it might be a case sensitive issue.

SolicitudRequest

POST https://graph.microsoft.com/beta/policies/claimsMappingPolicies
Content-type: claimsMappingPolicies/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\"}, {\"Source\":\"user\",\"ID\":\"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
}

RespuestaResponse

HTTP/1.1 201 OK
Content-type: claimsMappingPolicies/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/claimsMappingPolicies/$entity",
    "id": "a7b19e62-9adb-4edb-8521-cd35305f095d",
    "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\"}, {\"Source\":\"user\",\"ID\":\"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
}

Asignar directiva de asignación de notificaciones a entidad de servicioAssign claims mapping policy to service principal

SolicitudRequest

POST https://graph.microsoft.com/beta/servicePrincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e/claimsMappingPolicies/$ref

Content-type: claimsMappingPolicies/json

{
  "@odata.id":"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/6b33aa8e-51f3-41a6-a0fd-d660d276197a"
}

RespuestaResponse

HTTP/1.1 204

Paso 4: Configurar el certificado de firmaStep 4: Configure signing certificate

Usar la API de applicationTemplate no crea un certificado de firma de forma predeterminada.Using the applicationTemplate API doesn't create a signing certificate by default. Cree un certificado de firma personalizado y asígnelo a la aplicación.Create your custom signing cert and assign it to the application.

Cree un certificado de firma personalizadoCreate a custom signing certificate

Para probarlo, puede usar el siguiente comando de PowerShell para obtener un certificado autofirmado.To test, you can use the following PowerShell command to get a self-signed certificate. Después, tendrá que manipular y extraer manualmente los valores que necesita mediante otras herramientas.You will then need to manipulate and pull the values you need manually using other tools. Emplee el procedimiento de seguridad recomendado de su empresa para crear un certificado de firma para producción.Use the best security practice from your company to create a signing certificate for production.

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

Como alternativa, se puede usar la siguiente aplicación de consola C# como prueba de concepto para entender cómo obtener los valores necesarios.Alternatively, the following C# console app can be used as a Proof of Concept to understand how the required values can be obtained. Tenga en cuenta que este código es SOLO para aprendizaje y referencia y no se debe usar tal cual para producción.Note that this code is for learning and reference ONLY and should not be used as-is in production.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;


/* CONSOLE APP - PROOF OF CONCEPT CODE ONLY!!
 * This code uses a self signed certificate and should not be used 
 * in production. This code is for reference and learning ONLY.
 */
namespace Self_signed_cert
{
    class Program
    {
        static void Main(string[] args)
        {
            // Generate a guid to use as a password and then create the cert.
            string password = Guid.NewGuid().ToString();
            var selfsignedCert = buildSelfSignedServerCertificate(password);

            // Print values so we can copy paste into the JSON fields.
            // Print out the private key in base64 format.
            Console.WriteLine("Private Key: {0}{1}", Convert.ToBase64String(selfsignedCert.Export(X509ContentType.Pfx, password)), Environment.NewLine);

            // Print out the start date in ISO 8601 format.
            DateTime startDate = DateTime.Parse(selfsignedCert.GetEffectiveDateString()).ToUniversalTime();
            Console.WriteLine("For All startDateTime: " + startDate.ToString("o"));

            // Print out the end date in ISO 8601 format.
            DateTime endDate = DateTime.Parse(selfsignedCert.GetExpirationDateString()).ToUniversalTime();
            Console.WriteLine("For All endDateTime: " + endDate.ToString("o"));

            // Print the GUID used for keyId
            string signAndPasswordGuid = Guid.NewGuid().ToString();
            string verifyGuid = Guid.NewGuid().ToString();
            Console.WriteLine("GUID to use for keyId for keyCredentials->Usage == Sign and passwordCredentials: " + signAndPasswordGuid);
            Console.WriteLine("GUID to use for keyId for keyCredentials->Usage == Verify: " + verifyGuid);

            // Print out the password.
            Console.WriteLine("Password is: {0}", password);

            // Print out a displayName to use as an example.
            Console.WriteLine("displayName to use: CN=Example");
            Console.WriteLine();

            // Print out the public key.
            Console.WriteLine("Public Key: {0}{1}", Convert.ToBase64String(selfsignedCert.Export(X509ContentType.Cert)), Environment.NewLine);
            Console.WriteLine();

            // Generate the customKeyIdentifier using hash of thumbprint.
            Console.WriteLine("You can generate the customKeyIdentifier by getting the SHA256 hash of the certs thumprint.\nThe certs thumbprint is: {0}{1}", selfsignedCert.Thumbprint, Environment.NewLine);
            Console.WriteLine("The hash of the thumbprint that we will use for customeKeyIdentifier is:");
            string keyIdentifier = GetSha256FromThumbprint(selfsignedCert.Thumbprint);
            Console.WriteLine(keyIdentifier);
        }

        // Generate a self-signed certificate.
        private static X509Certificate2 buildSelfSignedServerCertificate(string password)
        {
            const string CertificateName = @"Microsoft Azure Federated SSO Certificate TEST";
            DateTime certificateStartDate = DateTime.UtcNow;
            DateTime certificateEndDate = certificateStartDate.AddYears(2).ToUniversalTime();

            X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN={CertificateName}");

            using (RSA rsa = RSA.Create(2048))
            {
                var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

                request.CertificateExtensions.Add(
                    new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature, false));

                var certificate = request.CreateSelfSigned(new DateTimeOffset(certificateStartDate), new DateTimeOffset(certificateEndDate));
                certificate.FriendlyName = CertificateName;

                return new X509Certificate2(certificate.Export(X509ContentType.Pfx, password), password, X509KeyStorageFlags.Exportable);
            }
        }

        // Generate hash from thumbprint.
        public static string GetSha256FromThumbprint(string thumbprint)
        {
            var message = Encoding.ASCII.GetBytes(thumbprint);
            SHA256Managed hashString = new SHA256Managed();
            return Convert.ToBase64String(hashString.ComputeHash(message));
        }
    }
}

Agregar una clave de firma personalizadaAdd a custom signing key

Agregar la siguiente información a la entidad de servicio:Add the following information to the service principal:

  • Clave privadaPrivate key
  • ContraseñaPassword
  • Clave públicaPublic key

Extraer la clave privada y pública codificada en Base64 del archivo PFX.Extract the private and public key Base64 encoded from the PFX file. Para más información sobre las propiedades, consulte tipo de recurso keyCredential.To learn more about the properties, see keyCredential resource type.

Asegúrese de que el keyId del keyCredential usado para "Sign" coincide con el keyId de passwordCredential.Make sure that the keyId for the keyCredential used for "Sign" matches the keyId of the passwordCredential. Puede generar customkeyIdentifier mediante la obtención del hash de la huella digital del certificado.You can generate the customkeyIdentifier by getting the hash of the cert's thumbprint. Vea el código C# de referencia anterior.See the previous C# reference code.

SolicitudRequest

Nota

Se ha abreviado el valor "clave" en la propiedad keyCredentials para facilitar la lectura.The "key" value in the keyCredentials property is shortened for readability. El valor está codificado en base 64.The value is base 64 encoded. Para la clave privada, la propiedad usage es "Sign".For the private key the property usage is "Sign". Para la clave pública, la propiedad usage es "Verify".For the public key the property usage is "Verify".

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e

Content-type: servicePrincipals/json

{
    "keyCredentials":[
        {
            "customKeyIdentifier": "lY85bR8r6yWTW6jnciNEONwlVhDyiQjdVLgPDnkI5mA=",
            "endDateTime": "2021-04-22T22:10:13Z",
            "keyId": "4c266507-3e74-4b91-aeba-18a25b450f6e",
            "startDateTime": "2020-04-22T21:50:13Z",
            "type": "X509CertAndPassword",
            "usage": "Sign",
            "key":"MIIKIAIBAz.....HBgUrDgMCERE20nuTptI9MEFCh2Ih2jaaLZBZGeZBRFVNXeZmAAgIH0A==",
            "displayName": "CN=awsAPI"
        },
        {
            "customKeyIdentifier": "lY85bR8r6yWTW6jnciNEONwlVhDyiQjdVLgPDnkI5mA=",
            "endDateTime": "2021-04-22T22:10:13Z",
            "keyId": "e35a7d11-fef0-49ad-9f3e-aacbe0a42c42",
            "startDateTime": "2020-04-22T21:50:13Z",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "key": "MIIDJzCCAg+gAw......CTxQvJ/zN3bafeesMSueR83hlCSyg==",
            "displayName": "CN=awsAPI"
        }

    ],
    "passwordCredentials": [
        {
            "customKeyIdentifier": "lY85bR8r6yWTW6jnciNEONwlVhDyiQjdVLgPDnkI5mA=",
            "keyId": "4c266507-3e74-4b91-aeba-18a25b450f6e",
            "endDateTime": "2022-01-27T19:40:33Z",
            "startDateTime": "2020-04-20T19:40:33Z",
            "secretText": "61891f4ee44d"
        }
    ]
}

RespuestaResponse

HTTP/1.1 204

Activar la clave de firma personalizadaActivate the custom signing key

Debe establecer la propiedad preferredTokenSigningKeyThumbprint en la huella digital del certificado que quiere que Azure AD use para firmar la respuesta de SAML.You need to set the preferredTokenSigningKeyThumbprint property to the thumbprint of the certificate you want Azure AD to use to sign the SAML response.

SolicitudRequest

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e

Content-type: servicePrincipals/json

{
    "preferredTokenSigningKeyThumbprint": "AC09FEF18DDE6983EE2A164FBA3C4DD7518BD787"
}

RespuestaResponse

HTTP/1.1 204

Paso 5: Asignar usuariosStep 5: Assign users

Asignar usuarios y grupos a la aplicaciónAssign users and groups to the application

Asigne el siguiente usuario a la entidad de servicio y asigne el AWS_Role1.Assign the following user to the service principal and assign the AWS_Role1.

NombreName Id.ID
Id. de usuario (principalId)User ID (principalId) 6cad4079-4e79-4a3f-9efb-ea30a14bdb266cad4079-4e79-4a3f-9efb-ea30a14bdb26
Tipo (principalType)Type (principalType) UsuarioUser
Id. de rol de aplicación (appRoleId)App role ID (appRoleId) 454dc4c2-8176-498e-99df-8c4efcde41ef454dc4c2-8176-498e-99df-8c4efcde41ef
servicePrincipalID (resourceId)servicePrincipalID (resourceId) f47a6776-bca7-4f2e-bc6c-eec59d058e3ef47a6776-bca7-4f2e-bc6c-eec59d058e3e

SolicitudRequest

POST https://graph.microsoft.com/v1.0/servicePrincipals/f47a6776-bca7-4f2e-bc6c-eec59d058e3e/appRoleAssignments

Content-type: appRoleAssignments/json

{
  "principalId": "6cad4079-4e79-4a3f-9efb-ea30a14bdb26",
  "principalType": "User",
  "appRoleId":"454dc4c2-8176-498e-99df-8c4efcde41ef",
  "resourceId":"f47a6776-bca7-4f2e-bc6c-eec59d058e3e"
}

RespuestaResponse

HTTP/1.1 201 
Content-type: appRoleAssignments/json

{
    "id": "rq7hyzl4yECaNZleMrTpDV-OCe5TEl5Ao_o76XMrRFU",
    "creationTimestamp": "2020-04-23T17:38:13.2508567Z",
    "appRoleId": "454dc4c2-8176-498e-99df-8c4efcde41ef",
    "principalDisplayName": "User 1",
    "principalId": "6cad4079-4e79-4a3f-9efb-ea30a14bdb26",
    "principalType": "User",
    "resourceDisplayName": "AWS API Created",
    "resourceId": "f47a6776-bca7-4f2e-bc6c-eec59d058e3e"
}

Para más información, consulte el tipo de recurso appRoleAssignment.For more information, see appRoleAssignment.

Paso 6: Configurar el lado de la aplicaciónStep 6: Configure the application side

Obtener los metadatos SAML de Azure ADGet Azure AD SAML metadata

Utilice la siguiente dirección URL para obtener los metadatos SAML de Azure AD para la aplicación configurada específica.Use the following URL to get the Azure AD SAML metadata for the specific configured application. Los metadatos contienen información como el certificado de firma, Azure AD entityID y Azure AD SingleSignOnService, entre otros.The metadata contains information such as the signing certificate, Azure AD entityID, and Azure AD SingleSignOnService, among others.

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

Pasos siguientesNext steps