【问题标题】:calling Azure AD secured own Web API n with specific scope using daemon / console app使用守护程序/控制台应用程序调用 Azure AD 保护自己的 Web API n 具有特定范围
【发布时间】:2020-08-06 18:39:39
【问题描述】:

我在 dotnet 核心中有一个自定义 Web API,我使用 [Authorize(Policy = "Admin")] 保护了 Web API。
我已经使用 App Registration 在 Azure AD 中注册了 Web api。我创建了两个应用程序角色“管理员”和“客户”。
我有一个控制台应用程序,它使用 Azure 中的应用程序注册在 Azure AD 中注册为客户端。
现在,当我使用范围请求访问令牌时- api://{guid}/.default (所有权限) 请求 OAuth 2.0 令牌端点 (v2) -https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token

我正在获取访问令牌,并且可以调用我的 web api 方法。但是,当我使用特定范围调用 Web api 时,请说“Admin”范围: api://{guid}/Admin

我收到错误 -

错误:无法完成 OAuth 2.0 令牌请求:“AADSTS70011:提供的请求必须包含“范围”输入参数。输入参数“范围”的提供值无效。范围 api://{guid }/管理员无效

【问题讨论】:

  • 对不起,我之前可能提供了一个不清楚的答案。此刻我已经更新了我的答案。如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。请参阅meta.stackexchange.com/questions/5234/…)。这对其他社区成员可能是有益的。谢谢。

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


【解决方案1】:

api://{guid}/Admin 不是在您的 Web API Azure AD 应用程序中公开的 API。

如果您想将“管理员”添加为委托权限,则应将其公开为 API。

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

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

现在您可以在使用authorization code flow 请求令牌时将其指定为scope


更新:

对不起,我必须在这里添加更多信息。

上面的截图是为了暴露Delegated权限。

如果要暴露Application权限,创建应用角色是正确的。

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

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

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

之后,您可以在使用client credentials flow 请求令牌时将其指定为scope

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多