Oauth 2.0 使用Azure AD保护aspnet webapi

Oauth 2.0 使用Azure AD保护aspnet webapi,oauth-2.0,azure-active-directory,Oauth 2.0,Azure Active Directory,我正在编写一个应用程序,它将成为react网站的后端。该网站将由我们的客户使用,但我们将完全控制用户的权限。我们已经决定使用Azure AD来保护请求,但也将公开API供最终用户在需要时直接使用 我的理解是,在Azure AD中,我必须创建一个允许基于web的隐式身份验证(针对react站点)的应用程序,以及一个允许基于dameon的应用程序对API进行身份验证的本机应用程序 我相信这意味着我的应用程序中将有两个观众ID 我正在尝试让声明包含组,我可以查看是否在azure AD中编辑这两个应用程

我正在编写一个应用程序,它将成为react网站的后端。该网站将由我们的客户使用,但我们将完全控制用户的权限。我们已经决定使用Azure AD来保护请求,但也将公开API供最终用户在需要时直接使用

我的理解是,在Azure AD中,我必须创建一个允许基于web的隐式身份验证(针对react站点)的应用程序,以及一个允许基于dameon的应用程序对API进行身份验证的本机应用程序

我相信这意味着我的应用程序中将有两个观众ID

我正在尝试让声明包含组,我可以查看是否在azure AD中编辑这两个应用程序的元数据以包含
“groupMembershipClaims”:“SecurityGroup”
我可以使用组ID获取声明,但不包含名称

我想我也可以使用
appRoles
来设置应用程序使用的角色,但我还没有像JWT中所说的那样做到这一点,但我假设这是可以做到的,但是我需要在每个应用程序上设置角色,然后添加用户两次,这并不理想。我还认为,因为我的应用程序是多功能的,外部用户可以使用它来设置自己的权限,这不是我想要做的

很抱歉,我完全迷路了,考虑到这种变化的频率,文档是无法理解的


TLDR:我需要在azure ad中配置两个应用程序吗?如果需要,设置权限(声明)的最佳方式是什么。oAuth 2在这里也是正确的选择,还是我应该看看OpenID?

我马上要纠正一个误解。 守护程序应用程序通常必须注册为Web/API,即publicClient:false。 这是因为本机应用程序不能有客户端机密。 当然,守护进程不能在用户的设备上运行。 因为这是本地应用程序的特点。在用户设备上运行的应用程序

我相信这意味着我的应用程序中将有两个观众ID

您将至少有两个应用程序。如果需要,后端和前端可以共享一个应用程序(启用隐式流)。守护进程将需要另一个注册

我正在尝试让声明包含组,我可以查看我是否在azure AD中编辑这两个应用程序的元数据以包含“groupMembershipClaims”:“SecurityGroup”我可以使用组ID获取声明,但没有名称

是的,仅包括ID。如果需要名称,请转到Graph API获取它们。但是你为什么需要它们呢?为了展示?否则,您需要使用ID设置权限。名称总是会更改,然后代码就会中断

我想我也可以使用appRoles来设置应用程序使用的角色,但我还没有像JWT中所说的那样实现,但我假设这是可以实现的,但是我需要在每个应用程序上设置角色,然后添加两次用户,这并不理想。我还认为,因为我的应用程序是多功能的,外部用户可以使用它来设置自己的权限,这不是我想要做的

您对多租户场景的想法是正确的。如果您确实想实现这些,我就写了一篇文章:

但是,为什么需要在多个应用程序中设置角色?他们不是只适用于网络应用吗? 如果本机应用程序是守护程序,则没有用户

总的来说,我能看出你的问题。您有来自其他组织的人,他们希望访问您的应用程序,但您希望控制他们的访问权限

老实说,最好的方法可能是让应用程序成为您控制的某个租户中的单个租户。然后邀请那里的外部用户作为来宾(这里有一个API)。然后,您可以使用组或批准为他们分配角色


如果我误解了什么,请发表评论,我会修正我的答案。

Azure AD当然是一个强大的系统,但我也发现OAuth方面令人困惑,因为这些方面非常混乱:

  • 基于标准的OAuth 2.0和Open Id Connect
  • Microsoft特定于供应商的行为
与角色相关的答案

这不是一个我很了解的领域——朱纳斯似乎是一个很好的人,可以帮你解决这个问题

OAUTH标准和AZURE

不久前,我在写一个基于教程的OAuth博客,为此而苦苦挣扎。也许我学到和写的一些东西对你有用

AZURE SPA和API代码示例

我的示例演示了如何使用SPA中的隐式流通过Azure AD登录用户,然后如何在自定义API中验证收到的令牌:

不确定其中有多少与您的用例相关,但我希望它在技术方面有所帮助