如何调试 [Authorize] 属性中的问题

Posted

技术标签:

【中文标题】如何调试 [Authorize] 属性中的问题【英文标题】:How to debug problems in [Authorize] attribute 【发布时间】:2017-01-29 00:12:56 【问题描述】:

问题

这就是标题中的所有内容,真的。我有一个[Authorize] 属性,它总是返回 401,我不知道为什么。我怎样才能逐步了解它背后的逻辑?

更多细节

我正在尝试通过 JWT 令牌使用 Azure AD 授权。我已经在其他项目中成功地做到了这一点,所以我确信问题是一些小的配置问题,但据我所知,我与 [Authorize] 的唯一交互是在 Startup.cs 中,我有这个:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions
    
        TokenValidationParameters = new TokenValidationParameters
        
            ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
            SaveSigninToken = true,
        ,
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"]
    );

但该位仅在应用程序启动时运行。否则,[Authorize] 对我来说就是一个黑盒子。

感谢您的帮助!

【问题讨论】:

您正在使用WindowsAzureActiveDirectoryBearerAuthentication。除非您在请求中提供 valid bearer token 作为 authorization header,否则您将始终得到 401。承载令牌身份验证用于 WebAPI。当您使用WindowsAzureActiveDirectoryBearerAuthentication 时,不会有任何重定向或任何重定向。如果你真的在尝试 WebAPI,那么你真的得到了错误的不记名令牌。 正如我提到的,这个 sn-p 取自一个工作项目,其中完整的身份验证链工作正常。我的问题是我正在尝试在新项目中重用代码。在某些时候,我可能输入了错误的 App ID 或其他一些小细节。这里的整个问题是我不确定如何调试[Authorize] 来找到我的错误。 【参考方案1】:

您可以查看 Fiddler 跟踪以进行调试。您可以在这里查看 ASP.NET 示例https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect

【讨论】:

以上是关于如何调试 [Authorize] 属性中的问题的主要内容,如果未能解决你的问题,请参考以下文章

具有 [Authorize] 属性的 JWT 身份验证

如何将枚举作为字符串参数传递给 Authorize 属性?

如何使用 IdentityServer4 访问令牌和 [Authorize] 属性

使用 .NET Core 6 中的 [Authorize] 属性重定向到自定义登录页面

身份服务器如何在 API 或我们使用 Authorize 属性时验证令牌?

如何创建不依赖于 ASP.NET Core 声明的自定义 Authorize 属性?