我将画一个场景,需要一些建议:
我使用的是Azure AD(v1.0端点),单页应用(SPA)和Web API。 SPA使用OpenID Connect建立用户身份,对用户进行身份验证,并为后端Web API接收id_token
和access_token
。
现在,我们不希望SPA根据SPA应用中收到的id_token
做出访问控制决策。
相反,SPA会将access_token
发送到后端Web API以访问它,现在我们希望后端Web API根据找到的roles
声明做出访问控制决策在id_token
中,但后端未从SPA收到。
问题是,后端Web API是否可以将收到的access_token
发送到Azure AD令牌端点并为用户接收相关的id_token
以便后端Web API收到包含用户id_token
声明的roles
,以便做出访问控制决定?
答案 0 :(得分:1)
您所描述的方法存在一些问题:
access_token
,为不同的受众群体换取id_token
。您可以 做一些令牌交换的变体,但在这种情况下,它们都无法帮助您。相反,您应该做的是在Web API上定义应用程序角色 。然后,将用户分配给Web API的相应应用程序角色。当这些用户登录SPA并且SPA获得代表他们访问Web API的访问令牌时,您会注意到访问令牌将包含roles
声明,并填充了相应的值。< / p>
汇总:
appRoles
(或直接在Application对象上)。 *如果您选择要求Web API的应用角色分配(在Enterprise apps&gt; Properties下),则SPA将无法为未分配给Web API的应用角色的用户获取访问令牌。如果您选择不来要求分配应用角色,则未分配应用角色的用户将能够登录SPA,并且SPA 将能够获得访问权限他们代表Web API使用令牌,但访问令牌不包含roles
声明。