Azure active directory 通过SPA中的MSAL检查Azure Active Directory组成员身份+;Web API

Azure active directory 通过SPA中的MSAL检查Azure Active Directory组成员身份+;Web API,azure-active-directory,single-page-application,msal,Azure Active Directory,Single Page Application,Msal,我正在构建一个应用程序,它有一个前端(一个用Vue.js构建的SPA),在后端(托管在Azure中)与两个基于json的Web API进行接口。Web API需要通过Azure Active Directory进行安全保护,用户必须是安全组的成员。此外,如果用户未作为一个帐户登录(即自动重定向),SPA应简单地尝试强制用户登录到已批准的帐户 事实上,我有所有这些工作。AAD应用程序具有Group.Read.All,用户通过SPA登录并给予同意,SPA调用getMemberGroups。此外,We

我正在构建一个应用程序,它有一个前端(一个用Vue.js构建的SPA),在后端(托管在Azure中)与两个基于json的Web API进行接口。Web API需要通过Azure Active Directory进行安全保护,用户必须是安全组的成员。此外,如果用户未作为一个帐户登录(即自动重定向),SPA应简单地尝试强制用户登录到已批准的帐户

事实上,我有所有这些工作。AAD应用程序具有Group.Read.All,用户通过SPA登录并给予同意,SPA调用getMemberGroups。此外,Web API可以检查SPA提供的访问令牌,不幸的是,Web API还必须调用getMemberGroups

我想这是我关心的问题。Web API一直必须调用getMemberGroups来锁定它。如果我对该服务进行了身份验证,我可能只会在验证成员资格组后返回访问令牌。但是我失去了SPA中的easy MSAL登录模型——Web API实际上不提供任何前端,SPA是静态托管的

据我所知,我无法让Azure Active Directory创建一个保证包含特定组声明的令牌。我想这会解决我的问题

有人能就围绕SPA+WebAPI环境设计身份验证模型的最佳方法提供一些建议吗?还是我采取的方法是唯一的方法


谢谢

您可以按照说明在您的令牌中包含组声明。您只需修改应用程序清单中的“groupMembershipClaims”字段:

"groupMembershipClaims": "SecurityGroup"
然后,令牌将包含使用所属组的ID,如下所示:

{
  "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}
您还可以利用角色和组来控制对应用程序的访问。您可以定义一些应用程序角色并将这些角色分配给组。那么组中的用户将拥有如下声明:

{
  "roles": ["admin"]
}
然后,您可以根据用户的角色实现授权逻辑


有关更多详细信息,请参阅和

谢谢。这些链接正是我所需要的。groups解决方案看起来并不完美,因为它使令牌太大,可能会溢出,而且无论如何我都要打电话。但应用程序角色解决方案是完美的。唯一的缺点是我无法在我的免费租户中测试应用程序角色,但这并不太昂贵,测试完成后,我可以模拟它继续前进。我有这个工作与角色e2e现在,谢谢@阿根杜姆很高兴这有帮助:)