Я пытаюсь добавить пользовательское утверждение в свой токен JWT, чтобы различать внутренних и внешних пользователей в моем веб-приложении.
Таким образом, я сделал следующее App registrations -> <My application> -> Enterprise Application -> Single sign-on -> Attributes & Claims -> Add new claim -> user.usertype
К сожалению, это не возвращает значение гостя, на которое я надеялся, когда я вхожу в систему и декодирую токен JWT. В моем случае я получаю, например UserTypeCloudManaged
Возможно, существует другой атрибут Source с этим значением? Я считаю весьма интересным то, что этот атрибут еще не установлен в утверждениях по умолчанию.
@Рукмини, я понимаю. Где я могу найти заявку idp, которую можно добавить? Его нельзя найти под Enterprise Application -> Attributes & Claims
или App registrations -> Token Configuration -> Optional Claims
. Нужно ли это добавить в раздел «Манифест»?
Для гостевых пользователей заявка idp может быть «live.com».
@Rukmini К сожалению, я этого не понимаю, но, возможно, я смотрю не на тот токен (accessToken). Я попробовал все версии null, 1,2 из accessTokenAcceptedVersion
. Возможно что-то не так с моими конфигами. Но на данный момент я получаю значения из userType
. Разве этого не будет достаточно, чтобы проверить, является ли пользователь внешним или внутренним? Зачем мне еще и требование idp
? Или это то или другое?
В противном случае вы можете использовать запрос API Microsoft Graph для проверки UserType?
@Rukmini Для гостей значение userType
равно UserTypeNoPa
. Думаю, этого будет достаточно, если это значение будет применяться глобально :) Насчет Microsoft Graph API query
я не знаю. Я проверю это. Спасибо вам большое за это! Документ немного сбивает с толку.
Дайте мне знать, если Microsoft Graph APi подойдет вам, я опубликую ответ.
Думаю, я просто воспользуюсь App Registration
App Roles
. Это не совсем то, что мне хотелось бы сделать, но это кажется более простым. Кстати, я перепроверил токен, idp
действительно появляется, но пока только для гостей. Настоящая загадка, я вам это скажу.
Для гостей значением userType является UserTypeNoPa, а для участников какое значение вы получаете?
@Rukmini Для моего внутреннего аккаунта UserTypeCloudManaged
. Однако я не нашел официальной документации, подтверждающей это.
Давайте продолжим обсуждение в чате.
@Rukmini Это всего лишь альтернатива. Я бы не сказал, что это решение моего вопроса.
Да, можно я опубликую ответ?
@Rukmini Конечно, можешь :)
Я добавил пользовательское утверждение в приложение Enterprise:
Сгенерировал токен доступа:
Grant type: Authorization code
Callback URL: https://oauth.pstmn.io/v1/callback
Auth URL: https://login.microsoftonline.com/TenantId/oauth2/v2.0/authorize
Token URL : https://login.microsoftonline.com/TenantId/oauth2/v2.0/token
Client ID : ClientID
Client Secret : ClientSecret
Scope: api://XXX/access_as_user
И получил значение утверждения UserType
как UserTypeCloudManaged, такое же, как и вы:
Обратите внимание: user.usertype не является значением открытого атрибута. Обратитесь к этому MsDoc, чтобы проверить утвержденные значения открытых атрибутов, которые могут отображаться как утверждения.
Следовательно, чтобы решить проблему, вам необходимо настроить условия заявки в соответствии с вашими требованиями и сохранить их, как показано ниже:
Теперь я сгенерировал токен доступа как участник и получил заявку как "UserType": "Member"
:
Для гостя получено "UserType": "Guest"
:
Прекрасно документировано! Что означает следующая мысль? «Обратите внимание: user.usertype не является значением открытого атрибута»,
Чтобы сделать утверждение user.usertype для отображения атрибутов, вам необходимо добавить условия утверждения, тогда как для других утверждений нет необходимости добавлять условия утверждения для раскрытия значения.
Следовательно, вы также используете утверждение idp, чтобы различать внутренних и внешних пользователей. Проверьте это Learn.microsoft.com/en-us/entra/identity-platform/…