我正在构建一个具有前端(使用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中的简单MSAL登录模型-Web API实际上不提供任何前端,SPA是静态托管的。
据我所知,我无法让Azure Active Directory创建保证其中包含某些组声明的令牌。我认为这可以解决我的问题。
有人可以针对围绕SPA + Web API环境设计身份验证模型的最佳方法提供一些建议吗?还是我采取的唯一方法?
谢谢!
您可以按照here的说明在您的令牌中包含网上论坛索赔。您只需要修改应用程序清单中的“ groupMembershipClaims”字段:
"groupMembershipClaims": "SecurityGroup"
然后令牌将包含使用所属的组的ID,如下所示:
{
"groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}
您还可以利用Role和Groups来控制对应用程序的访问。您可以定义一些应用程序角色,并将角色分配给组。然后,该组中的用户将具有以下声明:
{
"roles": ["admin"]
}
然后,您可以根据用户的角色实施授权逻辑。
有关更多详细信息,请参见https://joonasw.net/view/using-groups-vs-using-app-roles-in-azure-ad-apps和https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps