Как добавить настраиваемое утверждение и получить то же самое как часть access_token, если область действия не является Graph API в Azure AD?

Aug 19 2020

Я создал веб-приложение Azure AD. Теперь я получаю свой access_token, используя следующий API,

ПОСЛЕ 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

Ответ выглядит так:

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

Теперь я передаю access_token стороннему приложению, настроенному с тем же клиентом Azure AD. Теперь эта третья сторона ожидает, что пользовательское утверждение по имени "policy":"readwrite"будет передано как часть access_token. Как я могу добиться того же?

Ответы

1 AllenWu Aug 20 2020 at 04:26

Выполните следующие действия ( для экономии времени вы можете выполнить операцию Microsoft Graph в Microsoft Graph Explorer ):

Создайте extensionProperty (здесь вы можете использовать новое созданное приложение Azure AD):

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

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

Будет создано свойство расширения с именем extension_{client id of the Azure AD application}_policy.

Во-вторых, вы можете обновить свойство расширения для своей учетной записи:

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

{"extension_6d8190fbf1fe4bc38a5a145520221989_policy":"readwrite"}

Затем создайте 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}

Назначьте argumentsMappingPolicy объекту servicePrincipal. Обратите внимание, что servicePrincipal - это корпоративное приложение, которое представляет ваше стороннее приложение. В вашем случае это так 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}"}

Вы можете найти servicePrincipal на портале Azure -> Azure Active Directory -> Регистрация приложений -> найдите стороннее приложение Azure AD -> Обзор -> щелкните имя связанного субъекта-службы.

Теперь вернитесь к файлу манифеста стороннего приложения Azure AD. Установите acceptMappedClaimsзначение true и accessTokenAcceptedVersionзначение 2.

Затем, когда мы запрашиваем токен доступа для стороннего приложения с потоком предоставления ROPC, мы можем получить настраиваемое утверждение.