0

我正在尝试将我们的安全架构从 ASP.NET Core Identity 迁移到带有 MSAL.js 的 Azure AD V2。我们在 ASP.NET Core Identity 实现中使用了很多角色,并使用 Web 应用程序在数据库中管理信息。我放弃的模式与这个相似。

https://www.dotnetcurry.com/aspnet-core/role-based-security

带有 MSAL 的 Azure AD 正在运行。正在创建和传递令牌,并且使用通用[Authorize]属性装饰的本地 Web API 端点正在按照您的预期得到兑现。用 装饰的 Web API 端点[Authorize(Roles= "Fee, Foo, Fi, Fum")]抛出 401 未经授权的错误。

我不知道从这里去哪里。我是否为 Web API 编写 CustomAuthorize 属性覆盖并返回数据库并获取角色。(可能根据电子邮件地址将数据库定义的角色与用户匹配)

或者

有没有办法使用 Azure AD V2 本机实现角色?

我不确定从这里开始的最佳行动方案是什么。文档和代码示例似乎有限。将一个 AD 用户放入一个组中并让该组被视为 Web API 中的角色肯定会很好。另一方面,在 Web 应用程序的范围内处理角色委托是很好的。

任何建议、经验或兴趣将不胜感激。

回答

跟进我的问题。@Marc,您是对的,在查看了角色不存在的令牌之后。将角色添加到令牌似乎非常简单。您需要修补图形模式以包含它们,配置角色并根据需要通过 AAD 将它们分配给用户。

或者这就是它乍一看的样子。在深入挖掘之后,它需要 P1 或 P2 Enterprise 许可证,每位用户每月只需额外支付 6 美元。这实际上将使我们在云中托管电子邮件的成本增加一倍。

或者,我为 WebAPI 编写了一个 CustomAuthAttribute,并在服务器后端将用户和角色绑定在一起。仍然可以通过 Web 应用程序管理角色,并且用户仍然可以使用 Active Directory 凭据登录。

4

1 回答 1

0

我记得在隐式流(与 JS 一起使用的那个)中返回的 id 令牌不包括应用程序角色(或组)。我找不到任何文档来确认这一点,但看到其他人通过使用 Graph 来获取角色(或组)来解决这个问题(所以问题必须存在)。

您可以捕获从 AAD 收到的令牌并使用https://jwt.ms查看它,以查看其中是否包含角色。

于 2019-12-08T03:29:04.513 回答