Azure AD OAuth 客户端凭据流访问控制
Azure AD OAuth Client credentials flow access control
我正在使用 Azure AD OAuth2 授权来保护我的 Web API。现在我需要支持两个 OAuth2 场景(流程)-
访问Web的Web应用程序API,API基于用户角色的资源。
这是使用 authorize oauth 流程实现的,访问控制是使用 Authorize[Role="Read"] attributes
完成的
一个守护进程(控制台)应用程序访问同一个 Web API。虽然我能够通过使用客户端凭据 oauth 流程获得令牌,但我无法弄清楚如何管理对守护进程的访问
一旦令牌发出,控制台就可以直接访问任何 API 方法。
范围 - 当 grant_type 是 "client_credentials" 范围不是 /token 端点的参数
角色 - 不能使用它,因为它与用户相关
有人可以建议我们如何在客户端凭据流中进行访问控制吗?以及我如何同时满足要求 1 和 2
您可以在 Azure AD 的 API 清单中为用户和应用程序定义 "roles"。
如果您想知道,应用程序角色实际上是应用程序权限。
所以你可以在你的 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"
}
]
}
所以我们正在定义一个角色,它只允许应用程序作为其成员。这是一个应用程序权限。另一个是可以赋予用户和组的角色。
然后您可以为用户授予“读取所有内容”角色,并为守护程序控制台应用程序授予“读取所有内容”应用程序权限。你实现了这两种情况:)
您可以通过转到企业应用程序->您的 API->用户和组->添加用户来将角色添加到 users/groups。 Select 您想要的 users/groups 然后 select 他们的角色(如果您只有一个角色,它将被预先 select 编辑)。
你通过找到其他应用的App Registration->Required permissions->Add->找到你的API->Select->检查你之前定义的应用权限从名单。然后您可以按授予权限按钮授予应用程序角色。
然后您可以在任一场景的角色声明中获取值。
因此 roles 声明在第一种情况下将如下所示:
"roles": [
"Things.Read"
],
在第二种情况下像这样:
"roles": [
"Things.Read.All"
],
您可以使用您在客户端获得的令牌获得您提到的应用程序角色。但是在服务器端(受保护的API端),没有办法看到角色声明授权。
使用 User/Roles,您可以在清单文件中定义的用户和角色之间创建映射。因此 UI 和 API 将知道要授权的用户角色。
使用 App/Roles,无法在 Azure 门户上创建映射 clientId/clientSecret 到清单中定义的 AppRole。
我正在使用 Azure AD OAuth2 授权来保护我的 Web API。现在我需要支持两个 OAuth2 场景(流程)-
访问Web的Web应用程序API,API基于用户角色的资源。 这是使用 authorize oauth 流程实现的,访问控制是使用 Authorize[Role="Read"] attributes
完成的
一个守护进程(控制台)应用程序访问同一个 Web API。虽然我能够通过使用客户端凭据 oauth 流程获得令牌,但我无法弄清楚如何管理对守护进程的访问
一旦令牌发出,控制台就可以直接访问任何 API 方法。
范围 - 当 grant_type 是 "client_credentials" 范围不是 /token 端点的参数 角色 - 不能使用它,因为它与用户相关
有人可以建议我们如何在客户端凭据流中进行访问控制吗?以及我如何同时满足要求 1 和 2
您可以在 Azure AD 的 API 清单中为用户和应用程序定义 "roles"。
如果您想知道,应用程序角色实际上是应用程序权限。
所以你可以在你的 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"
}
]
}
所以我们正在定义一个角色,它只允许应用程序作为其成员。这是一个应用程序权限。另一个是可以赋予用户和组的角色。
然后您可以为用户授予“读取所有内容”角色,并为守护程序控制台应用程序授予“读取所有内容”应用程序权限。你实现了这两种情况:)
您可以通过转到企业应用程序->您的 API->用户和组->添加用户来将角色添加到 users/groups。 Select 您想要的 users/groups 然后 select 他们的角色(如果您只有一个角色,它将被预先 select 编辑)。
你通过找到其他应用的App Registration->Required permissions->Add->找到你的API->Select->检查你之前定义的应用权限从名单。然后您可以按授予权限按钮授予应用程序角色。
然后您可以在任一场景的角色声明中获取值。
因此 roles 声明在第一种情况下将如下所示:
"roles": [
"Things.Read"
],
在第二种情况下像这样:
"roles": [
"Things.Read.All"
],
您可以使用您在客户端获得的令牌获得您提到的应用程序角色。但是在服务器端(受保护的API端),没有办法看到角色声明授权。
使用 User/Roles,您可以在清单文件中定义的用户和角色之间创建映射。因此 UI 和 API 将知道要授权的用户角色。
使用 App/Roles,无法在 Azure 门户上创建映射 clientId/clientSecret 到清单中定义的 AppRole。