分配给 Azure 中托管身份的角色不存在于令牌中

问题描述 投票:0回答:1

我在应用程序中广泛使用角色分配。当我作为用户为我的 API 生成令牌时,我会获得分配给我的角色。

例如,我在一个组中,该组已被分配角色

Developer
principal role assignment

当我为该主体保护的 API 生成令牌时,我在生成的 JWT 中得到以下内容:

"roles": [
  "Developer"
]

令牌是使用 OAuth 2.0 生成的,其中 SPA 是生成令牌的

azp
声明中的客户端。

现在我想做同样的事情,但来自 APIM 并为委托人。 APIM 具有用户分配的托管身份,我已在与第一张图片中相同的主体上分配了仅应用程序角色。该分配已在支持托管身份的主体上到位: managed identity app role assignment

为了验证,我已使用以下策略向 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>

我可以调用此操作并取回令牌,但令牌上根本没有角色声明或任何其他元数据。

我想要实现的是能够根据角色声明确定主体拥有何种权限,就像我对用户帐户所做的那样。

我在这里误解了什么吗?为什么它对主体的行为与对用户的行为不同?如何在主体的新用例中实现相同的行为?

azure azure-authentication
1个回答
0
投票

24小时后您再次尝试过吗?一种可能性是您在分配角色之前使用托管身份获取了此 API 的令牌。托管身份端点将令牌缓存 24 小时(请参阅文档),因此对依赖于令牌中的值的权限所做的任何更改都不会反映出来,直到此缓存过期。

请注意,这不适用于 Azure RBAC 角色,例如在这种情况下令牌本身不会更改。

© www.soinside.com 2019 - 2024. All rights reserved.