ASP.Net Core 2.0 JWT和Windows身份验证的混合身份验证不接受凭据

问题描述 投票:16回答:2

我已经在asp.net core 2.0中创建了API,在其中我使用了混合模式身份验证。对于某些控制器JWT和某些使用Windows身份验证的控制器。

我对使用JWT授权的控制器没有问题。但是对于要使用Windows身份验证的控制器,我会无限期地提示我使用chrome的用户名和密码对话框。

这里是我要使用Windows身份验证而不是JWT的示例控制器代码。

[Route("api/[controller]")]
[Authorize(AuthenticationSchemes = "Windows")]
public class TestController : Controller
{
    [HttpPost("processUpload")]
    public async Task<IActionResult> ProcessUploadAsync(UploadFileModel uploadFileModel)
    {

    }
}

我的配置服务代码

public void ConfigureServices(IServiceCollection services)
{
     services.AddAuthentication(options =>
     {
        options.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
     })
     .AddJwtBearer("Bearer", options =>
     {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateAudience = false,       
            ValidateIssuer = false,  
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("blahblahKey")),
            ValidateLifetime = true, //validate the expiration and not before values in the token
            ClockSkew = TimeSpan.FromMinutes(5) //5 minute tolerance for the expiration date
        };
     });

     // let only my api users to be able to call 
     services.AddAuthorization(auth =>
     {
        auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
            .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
            .RequireClaim(ClaimTypes.Name, "MyApiUser").Build());
     });

     services.AddMvc();
}

我的配置方法。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors("CorsPolicy");

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseAuthentication(); //needs to be up in the pipeline, before MVC
    app.UseMvc();
}

感谢您的建议和帮助。

更新:到目前为止,我一直在chrome上调试我的代码。但是,当我使用IE 11时,上面的代码正在运行,没有任何问题。

这可能是Chrome的CORS问题,而在飞行前问题呢?

谢谢

c# authorization asp.net-core-2.0 authorize-attribute
2个回答
25
投票

您需要确保,当您尝试使用Windows身份验证时,您NOT


0
投票
我只是有同样的需求。我尚未在IIS(仅是Kestrel)上运行IIS,但是我设法适应了Microsoft的Authorization以使用JWT和Windows身份验证获得每个控制器/控制器方法的身份验证。
© www.soinside.com 2019 - 2024. All rights reserved.