Comment ajouter une revendication personnalisée et la récupérer dans le cadre de access_token, lorsque l'étendue n'est pas l'API Graph dans Azure AD?

Aug 19 2020

J'ai créé une application Web Azure AD. Maintenant, je reçois mon access_token en utilisant l'API suivante,

PUBLIER 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 réponse ressemble à,

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

Maintenant, je passe le access_token à une application tierce qui est configurée avec le même client Azure AD. Maintenant, ce tiers s'attend à ce qu'une revendication personnalisée par le nom "policy":"readwrite"soit transmise dans le cadre de access_token. Comment puis-je réaliser la même chose?

Réponses

1 AllenWu Aug 20 2020 at 04:26

Veuillez vous référer aux étapes suivantes (vous pouvez effectuer l'opération Microsoft Graph dans Microsoft Graph Explorer pour gagner du temps.):

Créez une extensionProperty (vous pouvez utiliser une nouvelle application Azure AD créée ici):

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

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

Il générera une propriété d'extension nommée extension_{client id of the Azure AD application}_policy.

Deuxièmement, vous pouvez mettre à jour la propriété d'extension de votre compte:

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

{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}

Créez ensuite 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}

Attribuez claimMappingPolicy à un servicePrincipal. Veuillez noter que le servicePrincipal ici est l'application d'entreprise qui représente votre application tierce. Dans votre cas, c'est le cas 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}"}

Vous pouvez trouver le servicePrincipal à partir du portail Azure -> Azure Active Directory -> Inscriptions d'applications -> trouver votre application Azure AD tierce -> Vue d'ensemble -> cliquez sur le nom de son principal de service associé.

Revenez maintenant au fichier manifeste de l'application Azure AD tierce. Réglez acceptMappedClaimssur vrai et accessTokenAcceptedVersionsur 2.

Ensuite, lorsque nous demandons un jeton d'accès pour l'application tierce avec un flux d'octroi ROPC, nous pouvons obtenir la revendication personnalisée.