使用守护程序/控制台应用程序调用具有特定范围的 Azure AD 保护自己的 Web API n

calling Azure AD secured own Web API n with specific scope using daemon / console app

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

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

我遇到错误 -

错误:未完成 OAuth 2.0 令牌请求:“AADSTS70011:提供的请求必须包含 'scope' 输入参数。输入参数 'scope' 的提供值不是 valid.The 范围 api://{guid}/Admin 无效

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

如果您想将 "Admin" 添加为委派权限,您应该将其公开为 API。

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

不要忘记点击“Grant admin consent for {your tenant}”以完成管理员同意。

现在您可以在使用 authorization code flow.

请求令牌时将其指定为 scope

更新:

抱歉,我必须在这里添加更多信息。

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

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

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

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

不要忘记点击“Grant admin consent for {your tenant}”以完成管理员同意。

之后,您可以在使用 client credentials flow.

请求令牌时将其指定为 scope