azure - 使用守护程序/控制台应用程序在特定范围内调用 Azure AD 安全的自己的 Web API

标签 azure asp.net-core-webapi azure-security

我在 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。

enter image description here

然后,您应该在 Web 应用 Azure AD 应用程序中添加委派权限(不是 Web API Azure AD 应用程序)。

enter image description here

不要忘记点击“为{您的租户}授予管理员同意”以完成管理员同意。

enter image description here

现在,您可以在使用 authorization code flow 请求 token 时将其指定为范围 .

<小时/>

更新:

抱歉,我必须在此处添加更多信息。

上面的屏幕截图用于公开委托(delegate)权限。

如果您想公开应用程序权限,创建应用程序角色是正确的。

创建应用程序角色后,您应该在 Web 应用 Azure AD 应用程序(不是 Web API Azure AD 应用程序)中添加权限。

enter image description here

选择 Web API Azure AD 应用。然后您将看到应用程序权限。选择刚刚在 Web API Azure AD 应用中创建的应用角色。

enter image description here

不要忘记点击“为{您的租户}授予管理员同意”以完成管理员同意。

enter image description here

之后,您可以在使用 client credentials flow 请求 token 时将其指定为范围 .

关于azure - 使用守护程序/控制台应用程序在特定范围内调用 Azure AD 安全的自己的 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387210/

相关文章:

azure-aks - Azure 安全中心发出高警报 "trusted registries only allowed for container images"

sql-server - Azure WebJobs 和 Azure SQL Server?

将数据提取为 XML 格式的 Azure 作业

asp.net-core - 在 EF Core 2.1 中执行异步不可选择存储过程

c# - Web-api和Kestrel访问本地MySql服务器时得到空连接

.net-core - VS 2017 如何构建和测试包含 .Net Core 的混合解决方案

azure - 是否可以增加虚拟机可以拥有的磁盘数量?

azure - Defender 365 REST API(您没有访问资源所需的任何应用程序权限(Incident.ReadWrite.All、Incident.Read.All))

azure - 服务信任门户和合规管理器之间的主要区别是什么

azure - 容器守护者 : what's needed for log analysis?