¿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?
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
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 acceptMappedClaims
en verdadero y accessTokenAcceptedVersion
en 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.
