Asp.net web api Azure AD OAuth客户端凭据流访问控制

Asp.net web api Azure AD OAuth客户端凭据流访问控制,asp.net-web-api,oauth-2.0,azure-active-directory,azure-ad-graph-api,Asp.net Web Api,Oauth 2.0,Azure Active Directory,Azure Ad Graph Api,我正在使用Azure AD OAuth2授权来保护我的Web API。现在我需要支持两个OAuth2场景(流)- Web应用程序访问Web API,并且基于用户角色的API将服务于资源。 这是使用authorize oauth流实现的,访问控制是使用authorize[Role=“Read”]属性完成的 访问同一Web API的守护程序(控制台)应用程序。虽然我能够通过使用客户端凭证oauth流来获取令牌,但我无法理解如何管理对守护进程的访问 一旦令牌发出,控制台就可以访问任何API方法 范围-

我正在使用Azure AD OAuth2授权来保护我的Web API。现在我需要支持两个OAuth2场景(流)-

  • Web应用程序访问Web API,并且基于用户角色的API将服务于资源。 这是使用authorize oauth流实现的,访问控制是使用authorize[Role=“Read”]属性完成的

  • 访问同一Web API的守护程序(控制台)应用程序。虽然我能够通过使用客户端凭证oauth流来获取令牌,但我无法理解如何管理对守护进程的访问

  • 一旦令牌发出,控制台就可以访问任何API方法

    范围-当授予类型为“客户端凭据”时,范围不是/token端点的参数 角色-无法使用它,因为它与用户关联

    有人能建议一下,我们如何在客户端凭证流中进行访问控制吗?以及如何同时满足要求1和2

    您可以在Azure AD的API清单中为用户和应用程序定义“角色”

    如果您想知道,应用程序角色实际上是应用程序权限

    因此,您可以在API清单中包含类似的内容(为了清晰起见,删除了其他属性):

    因此,我们正在定义一个角色,该角色只允许应用程序作为其成员。这是一个申请许可。另一个角色可以分配给用户和组

    然后,您可以为用户授予“读取内容”角色,并为守护进程控制台应用程序授予“读取所有内容”应用程序权限。您可以实现两种场景:)

    通过转到企业应用程序->API->用户和组->添加用户,可以将角色添加到用户/组。选择所需的用户/组,然后为其选择一个角色(如果只有一个角色,则将预先选择)

    通过查找其他应用程序的应用程序注册->所需权限->添加->查找API->选择->检查列表中先前定义的应用程序权限,可以添加应用程序权限。然后,您可以按“授予权限”按钮授予应用程序角色

    然后在任一场景的角色声明中获得值

    因此,角色声明在第一个场景中如下所示:

    "roles": [
        "Things.Read"
      ],
    
    "roles": [
        "Things.Read.All"
      ],
    
    在第二个场景中是这样的:

    "roles": [
        "Things.Read"
      ],
    
    "roles": [
        "Things.Read.All"
      ],
    

    您可以使用在客户端获得的令牌获得您提到的应用程序角色。但在服务器端(受保护的API端),无法看到角色声明要授权

    使用用户/角色,您可以在用户和清单文件中定义的角色之间创建映射。所以UI和API将知道要授权的用户角色


    对于应用程序/角色,Azure portal上无法创建映射clientId/clientSecret到清单中定义的AppRole的方法。

    这将在场景1中起作用,但如何处理客户端凭据流?假设我有一个客户端应用程序应该具有“读取”访问权限,另一个客户端应用程序需要“写入”访问权限,我在哪里指定映射?我们有没有办法在azure portal中定义此访问权限?或者客户端可以在令牌请求中请求此读/写权限吗?在您将应用程序权限添加到Azure AD中的控制台应用程序并授予该权限后,使用客户端凭据返回的令牌应包括角色。啊。。。你的应用可能是本地应用!他们无法获得应用权限,因为他们无法保守秘密。如果您已在控制台应用程序中授予应用权限并授予该权限,则应显示该权限。没有理由不去。是的。添加应用权限仅表示此应用希望执行此操作。它仍然需要管理员批准才能真正获得分配给它的角色。