Asp.net web api 如何调试JWT和AuthorizeAttribute

Asp.net web api 如何调试JWT和AuthorizeAttribute,asp.net-web-api,azure-active-directory,adal,Asp.net Web Api,Azure Active Directory,Adal,我正在关注,所有的事情似乎都在运行,直到我使用Postman使用访问令牌调用WebAPI为止 具体而言: 我请求一个令牌,Azure AD重定向我以提供用户名和密码 接受凭据并返回令牌 我告诉邮递员使用令牌并调用api 我拿到了401 如果我对令牌进行解码,所有内容看起来都是正确的,即aud与AD B2C中的Web API注册匹配、用户正确、声明等 在我的API作品中注释掉[Authorize]属性,返回数据,因此我认为这是API授权的一部分 不过,我不确定如何在ASP.NET核心Web A

我正在关注,所有的事情似乎都在运行,直到我使用Postman使用访问令牌调用WebAPI为止

具体而言:

  • 我请求一个令牌,Azure AD重定向我以提供用户名和密码
  • 接受凭据并返回令牌
  • 我告诉邮递员使用令牌并调用api
  • 我拿到了401
如果我对令牌进行解码,所有内容看起来都是正确的,即
aud
与AD B2C中的Web API注册匹配、用户正确、声明等

在我的API作品中注释掉
[Authorize]
属性,返回数据,因此我认为这是API授权的一部分

不过,我不确定如何在ASP.NET核心Web API中调试身份验证过程。例如,在我的控制器中放置断点是不起作用的,因为我的代码甚至没有达到那个程度

更新 在邮递员控制台中,响应标题显示:
WWW-Authenticate:“载体错误=“无效的令牌”,错误描述=“发卡机构无效”
。发行人是
https://login.microsoftonline.com//v2.0/

更新2 令人尴尬的是,正如文章中所记录的,一旦我将我的
appsettings.json中的
AzureAdB2C.Instance
设置与邮递员
Auth Url
匹配,
invalid_token
错误消失了,但现在我收到了500个错误:
无法从…获取配置。。。,Microsoft.IdentityModel.Protocols.ConfigurationManager.GetConfigurationAsync(CancellationToken cancel)

砖墙
由@Sam的最后一条评论和我之前实现的匹配权限域提示,而不是将appsettings.json
AzureAdB2C:Instance
值匹配到
https://login.microsoftonline.com/
,我将Postman
Auth Url
值与appsettings
AzureAdB2C:Instance
的值匹配https://.b2clogin.com/

您在API中使用的ASP.Net核心版本是什么?所有auth*进程都与标识相关。自v3以来,标识是NetCore的一部分,但在2.2中是外部的。最后,您需要的是调试标识命名空间,它是ASP.NET核心的一部分。@Sam ASP.NET版本是2.2。您将在这里找到如何激活调试,不仅针对代码,而且针对反汇编代码。如果我记得清楚的话,名称空间是Microsoft.AspNetCore.Identity。尽管逻辑可能在DataAnotations中,因为您使用[Authorize]作为标记。我希望这对你几乎有点帮助。@Sam,谢谢。我来看看。我想你的问题可能是政策问题。azure和api预期值之间存在拼写错误或差异。如果您想在Startup.cs中复制代码,或者确保它与您在azure中使用的配置匹配。
The thread 0x5c30 has exited with code 0 (0x0).
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET https://localhost:44366/api/values  
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Net.Sockets.dll'. 
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\Microsoft.Win32.Primitives.dll'. 
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Net.NameResolution.dll'. 
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Security.Cryptography.Encoding.dll'. 
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Collections.NonGeneric.dll'. 
Exception thrown: 'System.Net.Http.HttpRequestException' in System.Net.Http.dll
Exception thrown: 'System.IO.IOException' in Microsoft.IdentityModel.Protocols.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.InvalidOperationException' in Microsoft.IdentityModel.Protocols.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Diagnostics.StackTrace.dll'. 
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.5\System.Reflection.Metadata.dll'. 
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:Error: Exception occurred while processing message.
System.InvalidOperationException: IDX20803: Unable to obtain configuration from: '[PII is hidden]'. ---> System.IO.IOException: IDX20804: Unable to retrieve document from: '[PII is hidden]'. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)
   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)
   at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel)
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\2.2.5\Microsoft.AspNetCore.Http.Extensions.dll'. 
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 1438.8301ms 500 text/html; charset=utf-8