Я широко использую назначения ролей в приложениях. Когда я генерирую токен для своего API в качестве пользователя, я получаю назначенные мне роли.
Например, я в группе, и этой группе назначена роль Developer:
Когда я генерирую токен для API, который защищает этот принципал, в результирующем JWT я получаю следующее:
"roles": [
"Developer"
]
Токен генерируется с использованием OAuth 2.0, где SPA — это клиент, указанный в утверждении azp результирующего токена.
Теперь хочу сделать то же самое, но от APIM и для принципала. У APIM есть управляемое удостоверение, назначаемое пользователем, которому я назначил роль «Только приложение» тому же субъекту, что и в первом изображении. Назначение выполняется на субъекте, поддерживающем управляемое удостоверение:
Для проверки я добавил в APIM операцию со следующей политикой:
<inbound>
<authentication-managed-identity resource = "api://{{the-api-I-want-toca--}}" client-id = "{{apim-clientId}}" output-token-variable-name = "access-token" ignore-error = "false" />
<return-response>
<set-status code = "200" reason = "OK" />
<set-body>@("Bearer " + (string)context.Variables["access-token"])</set-body>
</return-response>
</inbound>
Я могу вызвать эту операцию и получить обратно токен, но в токене вообще нет заявления о роли или каких-либо других метаданных.
Чего я хочу добиться, так это возможности определять, какие разрешения имеет участник на основе утверждения роли, так же, как я могу это сделать с учетными записями пользователей.
Я здесь что-то неправильно понимаю? Почему для участников это не так же, как для пользователей? Как мне добиться такого же поведения в моем новом варианте использования с руководителями?


Вы пробовали еще раз через 24 часа? Одна из возможностей заключается в том, что вы приобрели токен для этого API с помощью управляемого удостоверения до того, как была назначена роль. Управляемая конечная точка удостоверения кэширует токены в течение 24 часов (см. документацию), поэтому любые изменения разрешений, основанные на значениях в токене, не будут отражены до истечения срока действия этого кеша.
Обратите внимание, что это не применимо к ролям Azure RBAC, и, например, сам токен в этом случае не изменится.
есть ли способ очистить этот кеш..?
Насколько мне известно, нет, кроме воссоздания Управляемой идентичности.
Вау, спасибо! Вы были правы в том, что я запросил токен, а затем назначил роль. Вернувшись с выходных, я вижу ожидаемую роль в своих претензиях. Я не знал, что токены управляемой идентификации кэшируются в течение 24 часов, было очень полезно знать об этом в будущем.