Azure AD OAuth客户端凭据流访问控制

omjgkv6w  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(147)

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

  1. Web应用访问Web API,基于用户角色的API将服务于资源,这是通过authorize oauth流程实现的,访问控制是通过Authorize[Role=“Read”]属性完成的
    1.访问同一Web API的守护程序(控制台)应用程序。虽然我可以使用客户端凭据oauth流获取令牌,但我无法确定如何管理对守护程序进程的访问
    一旦令牌发出,控制台就可以访问任何API方法。
    范围-当grant_type为“client_credentials”时,范围不是/token端点的参数角色-无法使用它,因为它与用户关联
    有人能建议一下,我们如何在客户端凭据流中进行访问控制?以及我如何同时满足要求1和2
jyztefdp

jyztefdp1#

您可以在Azure AD的API清单中为用户和应用程序定义“角色”。
应用程序角色实际上是应用程序权限,如果您想知道的话。
因此,您可以在API清单中包含如下内容(为清晰起见,删除了其他属性):

{
  "appRoles": [
    {
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "Read all things",
      "id": "32028ccd-3212-4f39-3212-beabd6787d81",
      "isEnabled": true,
      "description": "Allow the application to read all things as itself.",
      "value": "Things.Read.All"
    },
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Read things",
      "id": "ef8d02ff-eee1-6745-9387-96587c358783",
      "isEnabled": true,
      "description": "Allow the user to read things.",
      "value": "Things.Read"
    }
  ]
}

所以我们定义了一个角色,只允许应用作为它的成员,一个是应用权限,另一个是可以给用户和组的角色。
然后,您可以为用户授予Read things角色,并为守护程序控制台应用程序授予Read all things应用程序权限。
要将角色添加到用户/组,请转到企业应用程序-〉您的API-〉用户和组-〉添加用户。选择所需的用户/组,然后为它们选择角色(如果只有一个角色,则将预先选择)。

您可以通过查找其他应用的应用注册-〉所需权限-〉添加-〉查找您的API-〉选择-〉从列表中选中您之前定义的应用权限来添加应用权限。然后您可以按授予权限按钮来授予应用角色。

然后,您可以在角色声明中获得任一场景的值。
因此,在第一个场景中,roles 声明看起来像这样:

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

就像第二种情况一样:

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

htrmnn0y2#

你可以像你提到的那样通过在客户端获得的令牌来获得应用程序角色,但是在服务器端(受保护的API端),没有办法看到角色声明授权。
使用用户/角色,您可以在用户和清单文件中定义的角色之间创建Map,这样UI和API就知道要授权的用户角色。
对于应用程序/角色,Azure门户上无法创建clientId/clientSecret到清单中定义的AppRole的Map。

相关问题