Come aggiungere un'attestazione personalizzata e recuperare la stessa come parte di access_token, quando l'ambito non è l'API Graph in Azure AD?

Aug 19 2020

Ho creato un'applicazione Web Azure AD. Ora sto ottenendo il mio access_token utilizzando la seguente API,

INVIARE 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 risposta sembra,

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

Ora sto passando access_token a un'applicazione di terze parti configurata con lo stesso client Azure AD. Ora quella terza parte si aspetta che "policy":"readwrite"un'attestazione personalizzata con il nome venga trasmessa come parte di access_token. Come posso ottenere lo stesso risultato?

Risposte

1 AllenWu Aug 20 2020 at 04:26

Fare riferimento ai passaggi seguenti (è possibile eseguire l'operazione Microsoft Graph in Microsoft Graph Explorer per risparmiare tempo.):

Crea una proprietà extension (puoi usare una nuova applicazione Azure AD creata qui):

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

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

Genererà una proprietà di estensione denominata extension_{client id of the Azure AD application}_policy.

In secondo luogo, puoi aggiornare la proprietà dell'estensione per il tuo account:

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

{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}

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

Assegnare claimMappingPolicy a un servicePrincipal. Tieni presente che servicePrincipal qui è l'applicazione aziendale che rappresenta la tua applicazione di terze parti. Nel tuo caso lo è 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}"}

È possibile trovare servicePrincipal dal portale di Azure -> Azure Active Directory -> registrazioni app -> trovare l'app Azure AD di terze parti -> Panoramica -> fare clic sul nome dell'entità servizio associata.

Ora torna al file manifest dell'app Azure AD di terze parti. Impostato acceptMappedClaimssu true e accessTokenAcceptedVersionsu 2.

Quindi, quando richiediamo un token di accesso per l'applicazione di terze parti con il flusso di concessione ROPC, possiamo ottenere l'attestazione personalizzata.