Обновить токен, чтобы получить новый токен доступа
Одним из подходов может быть использование Refresh Token
для приобретения нового Access Token
, если вы используете грант, подобный предоставлению кода авторизации, в своем веб-приложении.
Подробнее об этом можно прочитать здесь - Обновление токенов доступа
Ваше приложение должно будет решить, когда приобретать новый токен доступа ... поэтому оно может сделать это, когда узнает, что членство в группе было обновлено внутренним компонентом / администратором.
Теперь отдельная тема, о которой вы особо не упоминали, - как ваше веб-приложение, в котором пользователь уже выполнил вход, узнает о таком событии, но что-то вроде уведомления SingalR может помочь.
На что обратить внимание:
Работа с токенами обновления может быть немного хрупкой, поскольку они могут быть отозваны по причинам, не контролируемым вашим приложением (например, смена пароля для пользователя, истечение срока действия, хотя это слишком долго и по другим причинам). В случае таких ошибок единственным вариантом остается получение нового кода авторизации.
Жетоны обновления должны храниться надежно
В частности, в случае groups
претензий могут быть сценарии с избыточным количеством ресурсов, когда один токен доступа может не помочь.
Альтернативный подход (вместо попытки принудительно обновить токен новой информацией, как вы упомянули)
Если groups
заявка - то, что вам нужно, тогда используйте Microsoft Graph API
, чтобы получить информацию о группах безопасности, к которой принадлежит пользователь, вместо того, чтобы смотреть только на токен доступа.
Код вашего приложения может снова вызвать Microsoft Graph API в любой момент, чтобы получить новые данные о членстве, т.е. группу 1 и группу 2 в соответствии с вашим примером (когда известно, что членство в группе было обновлено внутренним компонентом / администратором). SignalR или другой способ уведомить ваше приложение о таких изменениях также будет уместен здесь.
Соответствующие API Microsoft Graph
Преимущества
Вы можете обойти любые избыточные сценарии, когда пользователь принадлежит ко многим группам, поэтому токен доступа не предоставляет вам всю необходимую информацию о группе.
Вам не нужно принудительно выходить из системы и снова входить в систему для пользователя, чтобы получить токен доступа со свежей информацией.
подробности сценария превышения для groups
заявки в маркере доступа
В настоящее время вы, возможно, отредактировали манифест своего приложения и задали для свойства "groupMembershipClaims"
значение "All"
или "SecurityGroup"
, чтобы токен доступа получил groups
утверждение со всеми идентификаторами групп, к которым принадлежит пользователь
Чтобы убедиться, что размер токена не превышает ограничения размера заголовка HTTP, Azure AD ограничивает число идентификаторов объектов, включаемых в группы, в утверждении . Если пользователь является участником большего числа групп, чем предел превышения (150 для токенов SAML, 200 для токенов JWT), то Azure AD не отправляет утверждение группы в токене. Вместо этого он включает избыточное требование в токене, указывающее приложению запросить Graph API для получения членства в группе пользователя.