【问题标题】:Scope "scp" missing when Requesting a token in Azure AD B2C在 Azure AD B2C 中请求令牌时缺少范围“scp”
【发布时间】:2021-04-18 14:21:20
【问题描述】:

所以我正在尝试使用 Azure AD B2C 保护 Web API,但是当我尝试使用使用“运行用户流”获得的令牌访问端点时,我收到以下异常:

System.UnauthorizedAccessException:IDW10201:既不是作用域也不是角色 在不记名令牌中找到声明。

我的代码:

我创建了一个新的 ASP.NET Core 应用程序并使用对话框自动添加身份验证。

代码中一些有趣的点:

我尝试将以下内容添加到 appsettings.json 文件中,但没有帮助:

"AllowWebApiToBeAuthorizedByACL": true

我尝试从控制器中删除它,但没有帮助:

// The Web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);

在 ConfigureServices 我有以下代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAdB2C"));

Azure 门户:

  1. 我为 Azure AD B2C 创建了一个新租户

  2. 我注册了一个应用程序

  1. API 权限

这里我玩了很多,这些是我现在启用的权限:

  1. 创建用户流

然后,当我运行用户流时,我得到了:

使用的链接:

https://xxxxxxxxxxx001.b2clogin.com/xxxxxxxxx001.onmicrosoft.com/oauth2/v2.0/authorize?

p=B2C_1_user_flow_test_signinsignup

&client_id=xxxxxxxxxxxx

&nonce=defaultNonce

&redirect_uri=https%3A%2F%2Fjwt.ms

&scope=openid

&response_type=id_token

&prompt=登录

我对 azure 完全陌生,在研究了整个互联网之后,我无法弄清楚这里的问题是什么,以及为什么 scp 不在我从 azure 门户中提供的链接运行用户流时获得的令牌中。

对于我缺少设置或设置错误的内容,我非常感谢。

【问题讨论】:

标签: c# azure asp.net-core azure-ad-b2c


【解决方案1】:

添加到 Carl 的答案中,使用 B2C 链接您只会获得一个 ID 令牌,因为它将响应类型设置为 id_token,就像文章所述。为了获得访问令牌,您的 response_type 字段需要是“response_type=code”或“response_type=code+id_token”,即使这样 JWT.ms 也不会显示它。如果您捕获开发工具网络跟踪,您将在 authresp 框架 access_token 和 id_token 中看到两个参数。用 jwt.io 解码 access_token 会告诉我们你在找什么。

【讨论】:

    【解决方案2】:

    你得到的是 id 令牌。 id 令牌没有 scp 声明。它只包含登录用户的信息。您正在执行的只是登录用户的操作。

    如果您想获得scp 声明,您应该request an access token 而不是id 令牌。

    【讨论】:

    • 在获取令牌的 POST 操作中,我尝试使用 Postman 和 curl 执行它,无论我尝试什么,我都会得到“无法解析主机”。开发者获取令牌并测试 API 的推荐场景是什么?
    • 以防万一它对某人有所帮助,我在这篇文章的帮助下设法使用 Postman 获取了令牌:stackoverflow.com/questions/47275079/… 另外,我缺少的是创建我的 API 范围并授予他们权限。非常感谢 Carl,您在此处和其他用户的其他帖子中的回答非常有帮助!
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2019-09-22
    • 2020-06-14
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多