如何确定熊令牌失败的原因

Posted

技术标签:

【中文标题】如何确定熊令牌失败的原因【英文标题】:How can I determine why a bear token failed 【发布时间】:2020-08-28 11:45:22 【问题描述】:

运行一个基本的 ASP.NET Core RESTful 服务器,我使用我在端点上提供的 JWT 令牌来保护我的端点(这是目前的概念证明)。当我使用 Postman 进行测试时,我能够正确地进行身份验证,但是来自控制台应用程序,得到 401,未授权。

这是我在 ServiceExtensions 类中的内容:

public static IServiceCollection ConfigureJwtAuthentication(this IServiceCollection services,
            IConfiguration config)
        
            var section = config.GetSection("Jwt");
            var jwtOptions = section.Get<JwtConfigOptions>();

            services.AddAuthentication(options =>
                
                    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

                )
                .AddJwtBearer(options =>
                
                    //options.Authority = jwtOptions.AuthorityUrl;
                    options.RequireHttpsMetadata = false;
                    options.TokenValidationParameters = new TokenValidationParameters
                    
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,

                        ValidIssuer = jwtOptions.Issuer,
                        ValidAudience = jwtOptions.Audience,
                        IssuerSigningKey = jwtOptions.SymmetricSecurityKey
                    ;
                );

            return services;
        

这是我的 JwtConfigOptions 类:

public class JwtConfigOptions
    
        public string Key  get; set; 
        public string Issuer  get; set; 
        public string Audience  get; set; 
        public string AuthorityUrl  get; set; 
        public string AudienceUrl  get; set; 
        public SymmetricSecurityKey SymmetricSecurityKey => new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Key));
    

并且在 appsettings.json 中有值,所以我使用与审查令牌相同的值来创建。

有没有办法记录给定令牌被拒绝的原因?

【问题讨论】:

【参考方案1】:

我找到了答案。我发现 this site 链接到一个 github 解决方案,该解决方案包含 Microsoft.AspNetCore.Authentication.JwtBearer 程序集中的项目的源代码。我附加到 JwtBearerHandler 项目并能够单步执行代码。原来我在标头中错误地编码了不记名令牌。实际上有正确的代码在 /redface 之前注释掉了这一行

【讨论】:

以上是关于如何确定熊令牌失败的原因的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AFNetworking AFJSONRequestOperation 确定失败的原因

资源服务器如何知道我的熊访问令牌是有效的[重复]

使用ms-access确定ODBC失败的真正原因(错误3146)?

如何获取 Facebook 登录令牌,在“您已经授权 APPName”Facebook 中单击“确定”按钮后

Servicestack导致承载令牌无效

如何通过 AFNetworking 传递 facebook 访问令牌