我在 dotnet core 中有一个自定义 Web API,我已使用 [Authorize(Policy = "Admin")] 保护 Web API 的安全。
我已使用应用程序注册在 Azure AD 中注册了 Web api。我创建了两个应用程序角色“管理员”和“客户”。
我有一个控制台应用程序,它使用 Azure 中的应用程序注册在 Azure AD 中注册为客户端。
现在,当我请求使用范围的访问 token 时 - api://{guid}/.default (所有权限)
请求 OAuth 2.0 token 端点 (v2) - https://login.microsoftonline.com/ {tenantID}/oauth2/v2.0/token
我正在获取访问 token ,并且可以调用我的 Web API 方法。但是当我调用具有特定范围的 Web api 时,请说“Admin”范围: api://{guid}/Admin
我收到错误 -
错误:无法完成 OAuth 2.0 token 请求:“AADSTS70011:提供的请求必须包含“范围”输入参数。为输入参数“范围”提供的值无效。范围 api://{guid }/管理员无效
最佳答案
api://{guid}/Admin
不是在 Web API Azure AD 应用中公开的 API。
如果您想将“管理员”添加为委派权限,则应将其公开为 API。
然后,您应该在 Web 应用 Azure AD 应用程序中添加委派权限(不是 Web API Azure AD 应用程序)。
不要忘记点击“为{您的租户}授予管理员同意”以完成管理员同意。
现在,您可以在使用 authorization code flow 请求 token 时将其指定为范围
.
更新:
抱歉,我必须在此处添加更多信息。
上面的屏幕截图用于公开委托(delegate)权限。
如果您想公开应用程序权限,创建应用程序角色是正确的。
创建应用程序角色后,您应该在 Web 应用 Azure AD 应用程序(不是 Web API Azure AD 应用程序)中添加权限。
选择 Web API Azure AD 应用。然后您将看到应用程序权限。选择刚刚在 Web API Azure AD 应用中创建的应用角色。
不要忘记点击“为{您的租户}授予管理员同意”以完成管理员同意。
之后,您可以在使用 client credentials flow 请求 token 时将其指定为范围
.
关于azure - 使用守护程序/控制台应用程序在特定范围内调用 Azure AD 安全的自己的 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387210/