【问题标题】:Checking Azure Active Directory group membership via MSAL in a SPA + Web APIs在 SPA + Web API 中通过 MSAL 检查 Azure Active Directory 组成员身份
【发布时间】:2019-10-24 10:35:50
【问题描述】:

我正在构建一个应用程序,它有一个前端(使用 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 环境设计身份验证模型的最佳方式提供一些建议吗?还是我采取的方法是唯一的方法?

谢谢!

【问题讨论】:

    标签: azure-active-directory single-page-application msal


    【解决方案1】:

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

    "groupMembershipClaims": "SecurityGroup"
    

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

    {
      "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
    }
    

    您还可以利用角色和组来控制对应用程序的访问。您可以定义一些应用角色并将角色分配给组。然后该组中的用户将拥有如下声明:

    {
      "roles": ["admin"]
    }
    

    然后您可以根据用户的角色实现您的授权逻辑。

    详情请参阅https://joonasw.net/view/using-groups-vs-using-app-roles-in-azure-ad-appshttps://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

    【讨论】:

    • 谢谢。这些链接正是我所需要的。组解决方案似乎并不完美,因为它使令牌太大,并且可能溢出,无论如何我都必须拨打电话。但是应用角色解决方案非常完美。唯一的缺点是我无法在我的免费租户中测试应用程序角色,但担心它不会太贵,并且在测试完成后我可以继续模拟它。我现在正在使用角色 e2e,谢谢!
    • @Agendum 很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多