Asp.net web api WebAPI 2使用MSAL授权角色

Asp.net web api WebAPI 2使用MSAL授权角色,asp.net-web-api,azure-active-directory,asp.net-core-webapi,msal,msal.js,Asp.net Web Api,Azure Active Directory,Asp.net Core Webapi,Msal,Msal.js,我正在尝试将我们的安全体系结构从ASP.NET核心标识迁移到带有MSAL.js的Azure AD V2。我们在ASP.NET核心身份实现中使用了许多角色,并且使用web应用程序在数据库中管理信息。我放弃的模式与此类似 带有MSAL的Azure广告正在运行。令牌正在被创建和传递,并且使用generic[Authorize]属性修饰的本地Web API端点将如您所期望的那样得到尊重。用[Authorize(Roles=“Fee,Foo,Fi,Fum”)]修饰的Web API端点正在抛出未经授权的错

我正在尝试将我们的安全体系结构从ASP.NET核心标识迁移到带有MSAL.js的Azure AD V2。我们在ASP.NET核心身份实现中使用了许多角色,并且使用web应用程序在数据库中管理信息。我放弃的模式与此类似

带有MSAL的Azure广告正在运行。令牌正在被创建和传递,并且使用generic
[Authorize]
属性修饰的本地Web API端点将如您所期望的那样得到尊重。用
[Authorize(Roles=“Fee,Foo,Fi,Fum”)]修饰的Web API端点正在抛出未经授权的错误

我不知道接下来该怎么办。我是否为Web API编写CustomAuthorize属性重写并返回数据库并获取角色。(可能根据电子邮件地址将DB定义的角色与用户匹配)

有没有一种方法可以通过Azure AD V2本机实现角色

我不确定从现在开始最好的行动方案是什么。文档和代码示例似乎有限。将一个广告用户加入到一个组中,并让该组作为Web API中的一个角色受到尊重,这当然很好。另一方面,在Web应用程序的范围内处理角色委托很好

如有任何建议、经验或兴趣,将不胜感激

回答

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

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


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

我记得隐式流中返回的id令牌(与JS一起使用的)不包括应用程序角色(或组)。我找不到任何文档证实这一点,但谁通过使用图表获取角色(或组)绕过了问题(因此问题必须存在)

您可以捕获从AAD接收的令牌,并使用查看它,以查看其中是否包含角色