Como adicionar uma declaração personalizada e recuperar a mesma como parte de access_token, quando o escopo não é Graph API no Azure AD?

Aug 19 2020

Eu criei um aplicativo Web do Azure AD. Agora estou obtendo meu access_token usando a seguinte API,

POSTAR 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

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

Agora estou passando o access_token para um aplicativo de terceiros que está configurado com o mesmo cliente do Azure AD. Agora, esse terceiro está esperando uma declaração personalizada pelo nome "policy":"readwrite", a ser passada como parte do access_token. Como posso conseguir o mesmo?

Respostas

1 AllenWu Aug 20 2020 at 04:26

Consulte as seguintes etapas (você pode fazer a operação do Microsoft Graph no Microsoft Graph Explorer para economizar tempo.):

Crie uma extensionProperty (você pode usar um novo aplicativo Azure AD criado aqui):

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

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

Ele irá gerar uma propriedade de extensão chamada extension_{client id of the Azure AD application}_policy.

Em segundo lugar, você pode atualizar a propriedade da extensão para sua conta:

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

{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}

Em seguida, crie uma ClaimsMappingPolicy :

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}

Atribua o ClaimsMappingPolicy a um servicePrincipal. Observe que o servicePrincipal aqui é o aplicativo corporativo que representa seu aplicativo de terceiros. No seu caso, é 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}"}

Você pode encontrar o servicePrincipal no Portal do Azure -> Azure Active Directory -> Registros de aplicativos -> localizar seu aplicativo Azure AD de terceiros -> Visão geral -> clicar no nome de seu principal de serviço associado.

Agora volte para o arquivo de manifesto do aplicativo Azure AD de terceiros. Defina acceptMappedClaimscomo verdadeiro e accessTokenAcceptedVersioncomo 2.

Então, quando solicitamos um token de acesso para o aplicativo de terceiros com fluxo de concessão ROPC, podemos obter a declaração personalizada.