【问题标题】:How to diagnose Microsoft Identity authentication failure?如何诊断 Microsoft 身份验证失败?
【发布时间】:2021-08-03 19:27:15
【问题描述】:

我有一个受 Azure 身份验证保护的 ASP.NET Core 3.1 Web API 应用程序。我还有一个调用 Web API 的 Angular 11 应用程序。

它们在我们的集成环境中运行良好。但是在测试环境中认证失败。

Angular 应用程序使用 msal-angular 库进行了良好的身份验证,它获取访问令牌并在调用 Web API 时包含它。但是 Web API 无法从承载令牌中检索身份。

多次删除并重新创建(前端和后端)Azure APP 注册并重新配置它们后,身份验证仍然失败。我不知道是什么原因,所以这就是我需要诊断它的原因。

我已启用JwtBearerMiddlewareDiagnosticsEvents,我可以在日志中看到“Begin OnAuthenticationFailedAsync”和“End OnAuthenticationFailedAsync”。但这还不够信息。它不再告诉您事件已引发,也没有其他信息。

我已阅读以下有关文档的文章,该文章告诉您如何在 MSAL.NET 中配置日志记录,但我认为它不适用于 Web API。

https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-logging-dotnet

所以问题是:我如何才能找出身份验证失败的原因?有没有办法记录原因?

更新:

我更近了,我将日志级别设置为跟踪,现在我在 asp.net core web api 应用程序的日志中看到以下内容:

IDX10511:签名验证失败。尝试的键:'[PII 被隐藏。 有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]'。 \n孩子: '[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]

更新:

我收到以下错误:

承载未通过身份验证。失败消息:IDX10214:Audience 验证失败。观众:'242e8f40-d795-43bc-8ac8-8eed3df71745'。 不匹配:validationParameters.ValidAudience: 'b99e89fc-8a1c-4605-8c18-796d7064037e' 或 validationParameters.ValidAudiences: 'null'。

'242e8f40-d795-43bc-8ac8-8eed3df71745' 是 web api 应用注册清单上的 AppId。

'b99e89fc-8a1c-4605-8c18-796d7064037e'是web api注册的client id。

范围是'api://242e8f40-d795-43bc-8ac8-8eed3df71745/api-access'。

这是我设置范围的方式:

export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
  const protectedResourceMap = new Map<string, Array<string>>();
  protectedResourceMap.set('https://api.example.com/*', ['api://242e8f40-d795-43bc-8ac8-8eed3df71745/api-access']);
  return {
    interactionType: InteractionType.Popup,
    protectedResourceMap
  };
}

export function MSALGuardConfigFactory(): MsalGuardConfiguration {
  return {
    interactionType: InteractionType.Popup,
    authRequest: {
      scopes: ['api://242e8f40-d795-43bc-8ac8-8eed3df71745/api-access']
    },
    loginFailedRoute: '/login-failed'
  };
}

【问题讨论】:

  • 我想知道如果你删除 cookie 的工作系统,代码仍然可以工作。您可以尝试在工作系统上构建一个新系统,看看它是否有效。
  • @jdweng 它在 Chrome 隐身窗口上运行良好
  • 也许您需要在请求中添加一个 http 标头(用户代理)。请参阅:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
  • 您可能还遇到了 TLS 问题。在代码开头添加静态方法有时会解决问题:ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12;
  • @jdweng 用户代理标头由 Chrome 自动发送。我可以在我们的日志中看到它,我们会记录每个请求。

标签: c# asp.net-core authentication azure-active-directory msal-angular


【解决方案1】:

您的问题已解决。问题是web api的配置错误。您需要重新创建它们并重新配置。

根据我的经验,你需要在 Azure 中创建两个应用程序,一个代表 web api 应用程序,另一个代表客户端应用程序(即 Angular 11 应用程序)。

然后需要在Azure中公开web api应用的api,并将Angular 11应用作为客户端应用添加到web api应用中。

最后,在请求访问令牌时,需要将范围设置为:api://{web api client id}/{scope name}

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2017-11-27
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多