¿Cómo agregar una notificación personalizada y recuperar la misma como parte de access_token, cuando el alcance no es Graph API en Azure AD?

Aug 19 2020

He creado una aplicación web de Azure AD. Ahora obtengo mi access_token usando la siguiente API,

ENVIAR https://login.microsoftonline.com/{Directory (tenant) ID }/oauth2/v2.0/token

password:pass 
client_id:id
resource:https://graph.microsoft.com 
grant_type:password 
client_secret:secret 
sername:userName 
scope: https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXX/.default

La respuesta parece,

"token_type": "Bearer",
    "scope": "https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXX/myTestRole https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXXX/user_impersonation https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXXX/.default",
    "expires_in": 3599,
    "ext_expires_in": 3599, "access_token": "acessToken"

Ahora paso el access_token a una aplicación de terceros que está configurada con el mismo cliente de Azure AD. Ahora, ese tercero espera un reclamo personalizado por el nombre "policy":"readwrite", que se pasará como parte de access_token. ¿Cómo puedo lograr lo mismo?

Respuestas

1 AllenWu Aug 20 2020 at 04:26

Consulte los siguientes pasos (puede realizar la operación de Microsoft Graph en Microsoft Graph Explorer para ahorrar tiempo):

Cree una extensionProperty (puede usar una nueva aplicación de Azure AD creada aquí):

Post https://graph.microsoft.com/v1.0/applications/{object id of the Azure AD application}/extensionProperties

{"name":"policy","dataType":"string","targetObjects":["User"]}

Generará una propiedad de extensión llamada extension_{client id of the Azure AD application}_policy.

En segundo lugar, puede actualizar la propiedad de extensión de su cuenta:

Patch https://graph.microsoft.com/v1.0/me

{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}

A continuación, cree un ClaimMappingPolicy :

Post https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies

{"definition":["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\": [{\"Source\":\"user\",\"ExtensionID\":\"extension_6d8190fbf1fe4bc38a5a145520221989_policy\",\"JwtClaimType\":\"policy\"}]}}"],"displayName":"ExtraClaimsAllen1Example","isOrganizationDefault":true}

Asigne ClaimMappingPolicy a un servicePrincipal. Tenga en cuenta que servicePrincipal aquí es la aplicación empresarial que representa su aplicación de terceros. En tu caso lo es 0a7c94a0-0c4e-4f95-ba06-XXXX.

Post https://graph.microsoft.com/v1.0/servicePrincipals/{obeject id of the servicePrincipal which represents your third party application}/claimsMappingPolicies/$ref

{"@odata.id":"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/{policy id from the previous step}"}

Puede encontrar el servicePrincipal en Azure Portal -> Azure Active Directory -> Registros de aplicaciones -> busque su aplicación de Azure AD de terceros -> Descripción general -> haga clic en el nombre de su principal de servicio asociado.

Ahora vuelva al archivo de manifiesto de la aplicación de Azure AD de terceros. Establecer acceptMappedClaimsen verdadero y accessTokenAcceptedVersionen 2.

Luego, cuando solicitamos un token de acceso para la aplicación de terceros con el flujo de concesión de ROPC, podemos obtener el reclamo personalizado.