响应 JWT 错误的 Authentication Asp.Net Core Web Api

Posted

技术标签:

【中文标题】响应 JWT 错误的 Authentication Asp.Net Core Web Api【英文标题】:Give response to JWT wrong Authentication Asp.Net Core Web Api 【发布时间】:2019-06-25 18:16:06 【问题描述】:

我已经申请了tutorial 并创建了一个 asp.net 核心 Web API 身份验证应用程序。

一切都很好,运行完美,但如果我传递了错误的授权密钥,它不会返回任何东西。

我尝试使用下面的代码进行测试,但没有获得上下文委托。

x.Events.OnChallenge = context =>
                
                    // Skip the default logic.
                    context.HandleResponse();

                    var payload = new JObject
                    
                        ["error"] = context.Error,
                        ["error_description"] = context.ErrorDescription,
                        ["error_uri"] = context.ErrorUri
                    ;

                    return context.Response.WriteAsync(payload.ToString());
                ;

我还想为错误的授权设置自定义错误返回代码,因此我们将不胜感激。

提前致谢。

我的配置服务代码是:

public void ConfigureServices(IServiceCollection services)
        
            services.AddCors();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            // configure strongly typed settings objects
            var appSettingsSection = Configuration.GetSection("AppSettings");
            services.Configure<AppSettings>(appSettingsSection);

            // configure jwt authentication
            var appSettings = appSettingsSection.Get<AppSettings>();
            var key = Encoding.ASCII.GetBytes(appSettings.Secret);
            services.AddAuthentication(x =>
            
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            )

            .AddJwtBearer(x =>
            
                x.RequireHttpsMetadata = false;
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters
                
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false
                ;
            );

            // configure DI for application services
            services.AddScoped<IUserService, UserService>();
        

【问题讨论】:

【参考方案1】:

它不会工作,因为在你会使用的 startup.cs 文件中

app.UseJwtBearerAuthentication(new JwtBearerOptions()
//other stuff

它与您的方法上的 [Authorize] 数据注释一起使用,并且仅在传递有效令牌时同时使用。

稍后您可以提取声明并在

上执行验证
HttpContext.User.Identity as ClaimsIdentity;

你可以检查一下...如果它有帮助 link1 和 link2

【讨论】:

我没明白你的意思。我必须在哪里进行更改?我试过你的代码 app.UseJwtBearerAuthentication(new JwtBearerOptions() //other stuff 但它不可用。我只使用我在问题中给出的tutorial 中定义的那些包。 检查这个...如果它有帮助 [链接] c-sharpcorner.com/article/… 和 [链接] ***.com/questions/45315274/…

以上是关于响应 JWT 错误的 Authentication Asp.Net Core Web Api的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 的分析器中不存在 lexik_jwt_authentication.on_jwt_created

应该将 JWT 中不存在的角色添加到 Authentication 对象的啥位置?

JWT Authentication,Authorize 属性中定义的角色被忽略

wp rest api 授权方法步骤(使用JWT Authentication插件)

JWT spring security Authentication过滤器丢失标头信息

Spring Cloud authentication with JWT service