从ASP.NET Core 1迁移到ASP.NET Core 2后,令牌身份验证停止工作

时间:2017-08-22 18:36:04

标签: c# asp.net .net-core

我按照site将我的网站从ASP.NET Core 1迁移到ASP.NET Core 2。

但是,在执行ASP身份更改后,我的身份验证停止了工作。

我的服务如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton(_ => Configuration);

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddResponseCaching();

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    var secretKey = Configuration.GetSection("AppSettings")["SecretKey"];
    var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey));
    var tokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = signingKey,
        ValidateIssuer = true,
        ValidIssuer = "arnvanhoutte",
        ValidateAudience = true,
        ValidAudience = "User",
        ValidateLifetime = true,
        ClockSkew = TimeSpan.Zero
    };

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = tokenValidationParameters;
        });

    services.AddWebSocketManager();

    services.AddMvc();

    services.AddTransient<Seed>();
}

我的配置方法底部有app.UseAuthentication();

然而,当我在控制器中检查var isAuthenticated = User.Identity.IsAuthenticated;时,它总是说错误。它之前有用,所以我不明白为什么它会停止工作。

1 个答案:

答案 0 :(得分:3)

我在迁移期间遇到了类似的问题

对我而言,登录工作没有任何问题,但后续请求失败,重定向到登录页面而不是抛出401(导致404作为其  一个web api我没有任何登录页面!)。

将defaultauthenticationscheme和DefaultChallengeScheme添加到addauthentication为我做了诀窍。

按如下所示更改addauthentication以使jwt身份验证正常工作!

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = tokenValidationParameters
            });