Azure AD B2C 错误 - IDX10501:签名验证失败

Posted

技术标签:

【中文标题】Azure AD B2C 错误 - IDX10501:签名验证失败【英文标题】:Azure AD B2C error - IDX10501: Signature validation failed 【发布时间】:2017-09-02 18:29:51 【问题描述】:

我很难尝试使用 Azure AD B2C 来验证我的 Web API。 我将从一些背景开始

我创建了使用 Azure AD B2C 对用户进行身份验证的移动应用程序。我正在创建一个显示此 url 的 WebView:

要求用户登录 azure ad,如果登录数据成功,我将收到包含访问令牌的响应 - 这部分进展顺利,一切正常。

现在我想创建后端 Web Api。我创建了允许我选择身份验证方法的 ASP NET Core Web 应用程序。我选择 Azure AD 身份验证,因此模板为我生成了所有必需的数据。代码中的相关部分在这里:

我更新了所有必需的配置属性以匹配我的 azure 设置。在这一点上,我希望能够使用我在移动应用程序上收到的访问令牌来调用 API。我在本地运行移动应用程序,登录,接收访问令牌,复制它并尝试使用邮递员(带有授权标头“Bearer ...”)调用我的 Web api(托管在 IIS express 中)。不幸的是,没有运气 - 我收到了带有以下标题的 401:

Bearer error="invalid_token", error_description="签名密钥是 没找到”

我认为令牌足以授权 API - 我知道这是 OAuth 的重点。我错过了什么吗?我应该有一些额外的配置吗?我注意到配置缺少登录策略(这似乎是 AD B2C 名称所必需的,所以我尝试添加:

var validationParameters = new TokenValidationParameters

    AuthenticationType = "MY_POLICY", 
;

app.UseJwtBearerAuthentication(new JwtBearerOptions

    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"],
    Audience = Configuration["Authentication:AzureAd:Audience"],
    TokenValidationParameters = validationParameters
);

但这也没有用。将不胜感激。

编辑

我在 Visual Studio 日志中发现以下错误:

承载未通过身份验证。失败消息:IDX10501:签名 验证失败。无法匹配“孩子”:“...”

【问题讨论】:

您的权限可能有误。我不太确定 B2C 需要什么,但我认为这将是一个包含您的策略 ID 的 URL。.. 你让我找到了正确的方向,谢谢! 【参考方案1】:

@juunas 评论帮助我找到问题。我用提琴手检查了传出的请求,我发现用这段代码:

Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"]

请求被发送到以下地址:

https://login.microsoftonline.com/MYTENANTID/.well-known/openid-configuration

上面有两个问题:

    它没有使用 v2 端点。 B2C 的正确链接应始终使用 v2,因此它看起来像:

https://login.microsoftonline.com/MYTENANTID/v2.0/.well-known/openid-configuration

    它没有向链接添加登录策略(即使我在令牌选项中设置了它)

我设法通过删除“Authority”参数并将配置身份验证功能更改为以下功能使其工作:

app.UseJwtBearerAuthentication(new JwtBearerOptions

  MetadataAddress = string.Format("https://login.microsoftonline.com/0/v2.0/.well-known/openid-configuration?p=1", 
      Configuration["Authentication:AzureAd:TenantId"], "MYPOLICY"),
      AuthenticationScheme = "MYPOLICY",
  Audience = Configuration["Authentication:AzureAD:ClientId"],
);

【讨论】:

我无法告诉你我在这件事上浪费了多少小时,然后我发现了你的答案。完全为我做。我只需要上面显示的格式的 Audience 和 MetadataAddress。感谢您的帖子。 很高兴它帮助了你,我也花了很多时间找到这个解决方案

以上是关于Azure AD B2C 错误 - IDX10501:签名验证失败的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C OpenIdConnect ConfigurationManager 错误

Azure AD B2C CORS 错误

访问被 Azure AD B2C 锁定的 Azure 函数应用时收到 403 错误

Azure AD - 为啥我无法验证 Azure AD 为我的 Web API 颁发的 JWT 令牌?收到“IDX10516:签名验证失败”错误

Azure AD B2C 登录 - “包含阻止加载的脚本错误”

收到 IDX10501 的错误信息:签名验证失败。使用 Azure AD 时无法匹配密钥