。 Net core 2.0 windows和jwt身份验证

时间:2018-01-13 19:11:22

标签: windows authentication jwt asp.net-core-2.0

是否可以在同一个项目中实现windows和jwt身份验证方案?

我需要Windows身份验证来捕获没有任何登录页面的用户和jwt来处理任何其他页面和wep api的角色。

1 个答案:

答案 0 :(得分:0)

是的,您可以向应用程序添加多个身份验证方案。请参阅以下link

我终于让两者都工作了。我没有在互联网上找到任何解决的例子,希望这可以帮助任何人寻找答案。

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = "Bearer";
            }).AddJwtBearer("Bearer", options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateAudience = false,
                    //ValidAudience = "the audience you want to validate",
                    ValidateIssuer = false,
                    //ValidIssuer = "the isser you want to validate",

                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("myapisecretkey")),

                    ValidateLifetime = true, //validate the expiration and not before values in the token

                    ClockSkew = TimeSpan.FromMinutes(5) //5 minute tolerance for the expiration date
                };
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                    .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
                    .RequireClaim(ClaimTypes.Name, "MyAPIUser").Build());
            });

然后通过装饰选择要在特定控制器上使用的身份验证方案。

[Route("api/MyController")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller