Обновите токен, чтобы получить новый токен доступа
Один из подходов может заключаться в использовании Refresh Token
для получения нового Access Token
, если вы используете грант, например предоставление кода авторизации, в своем веб-приложении.
Подробнее об этом можно прочитать здесь - Обновление токенов доступа
Ваше приложение должно будет решить, когда получить новый токен доступа ... чтобы оно могло это сделать, когда узнает, что членство в группе было обновлено внутренним компонентом / администратором.
Теперь отдельная тема, о которой вы особо не упомянули, - это то, как ваше веб-приложение, в котором пользователь уже вошел в систему, узнает о таком событии, но что-то вроде уведомления SingalR может помочь.
На заметку:
Работа с токенами обновления может быть немного хрупкой, так как они могут быть отозваны по причинам, не контролируемым вашим приложением (например, смена пароля для пользователя, истечение срока действия, хотя и долгого, и по другим причинам). В случае таких ошибок единственным выходом будет получение нового кода авторизации.
Жетоны обновления должны храниться в надежном месте.
В частности, в случае groups
заявлений могут быть избыточные сценарии, когда один только токен доступа может не помочь.
Альтернативный подход (вместо попытки принудительно обновить токен новой информацией, о которой вы упомянули)
Если вам нужно groups
утверждение, тогда используйте Microsoft Graph API
для получения информации о группах безопасности, к которым принадлежит пользователь, вместо того, чтобы смотреть только на токен доступа.
Код вашего приложения может снова вызвать Microsoft Graph API в любой момент, чтобы получить новые данные о членстве, например, группу 1 и группу 2, как в вашем примере (когда он знает, что членство в группе было обновлено внутренним компонентом / администратором). SignalR или какой-либо другой способ уведомить ваше приложение о таких изменениях также будет уместен здесь.
Соответствующие API Microsoft Graph
пользователь: GetMemberGroups
POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
Это только один, который кажется мне актуальным, но есть и другие похожие API, такие как memberOf, и вы можете выбрать, исходя из ваших требований.
Преимущества
Вы можете обойти любые чрезмерные сценарии, когда пользователь принадлежит ко многим группам, поэтому токен доступа не предоставляет вам всю необходимую информацию о группе.
Вам не нужно принудительно выходить из системы и снова входить в систему для пользователя, чтобы получить токен доступа со свежей информацией.
Подробная информация об избыточном сценарии для groups
заявки в токене доступа
В настоящее время вы, возможно, отредактировали манифест своего приложения и установили для свойства "groupMembershipClaims"
значение "All"
или "SecurityGroup"
, чтобы токен доступа получил groups
утверждение со всеми идентификаторами групп, к которым принадлежит пользователь.
Чтобы гарантировать, что размер токена не превышает ограничения размера заголовка HTTP, Azure AD ограничивает количество идентификаторов объектов, которые он включает в утверждение групп. Если пользователь является участником большего количества групп, чем установленный предел (150 для токенов SAML, 200 для токенов JWT), то Azure AD не отправляет утверждение групп в токене. Вместо этого он включает в токен утверждение о превышении, которое указывает приложению запрашивать Graph API для получения членства пользователя в группе.
person
Rohit Saigal
schedule
09.04.2019