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?
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
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 acceptMappedClaims
como verdadeiro e accessTokenAcceptedVersion
como 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.
