繁体   English   中英

ASP.NET Core-JwtBearer 2.0.0

[英]ASP.NET Core - JwtBearer 2.0.0

我正在尝试在ASP.NET Core Web API中实现JWT。 在JwtBearer的1.1.2版本中,我的Startup.cs文件中包含以下代码:

public void ConfigureServices(IServiceCollection services)
{
     ...

     services.Configure<JwtSettings>(Configuration.GetSection("jwt"));

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
     ...
     var jwtSettings = app.ApplicationServices.GetService<JwtSettings>();
     app.UseJwtBearerAuthentication(new JwtBearerOptions
     {
          AutomaticAuthenticate = true,
          TokenValidationParameters = new TokenValidationParameters
          {
               ValidIssuer = jwtSettings.Issuer; // "http://localhost:5000"
               ValidateAudience = false,
               IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key)) // some secret Key
          }
     });

     app.UseMvc();
}

此代码在JwtBearer 2.0.0中的外观如何?

我这样安装了这个软件包:

dotnet添加软件包Microsoft.AspNetCore.Authentication.JwtBearer

我的.NET Core版本:

2.0.0

基于以上代码,您需要将其重构为dotnet core 2.0,如下所示...根据您的要求进行调整,这是在运输过程中的快速解答。

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(o => {
            o.Audience = Configuration.GetSection("jwt:Audience").Value;
            o.Authority = Configuration.GetSection("jwt:Authority").Value;
            o.RequireHttpsMetadata = Configuration.GetValue<bool>("jwt:RequireHttps");
            o.Events = new JwtBearerEvents()
            {
                OnAuthenticationFailed = c =>
                {
                    c.NoResult();
                    c.Response.StatusCode = 401;
                    return c.Response.WriteAsync("Invalid Token");
                }
            };
        });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // ...
        app.UseAuthentication();
        // ...
        app.UseMvc();
    }

这可以为您工作:

public void ConfigureServices(IServiceCollection services)

{

      services.Configure<JwtSettings>(Configuration.GetSection("jwt"));

      var provider = services.BuildServiceProvider();     

      var jwtSettings = provider.GetService<JwtSettings>();


        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(o =>
            {                                   
                o.TokenValidationParameters = new TokenValidationParameters
                {                        
                    ValidateIssuer = jwtSettings.Issuer;
                    ValidateAudience = false,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key)) // some secret Key

                };                   

            });




}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 ....

  app.UseAuthentication();
  app.UseMvc();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM