.net core 2.2 使用Cookie 和 JWT 两种方式认证

​ ​ 我在做接口认证的时候,方便起见,直接使用Cookie方式认证,不过,考虑到有些时候,比如小程序、安卓开发不支持Cookie, 于是给程序同时加上了JWT认证方式。
这样子,只要拥有正确的Token,便可以不受限制的调用Api。

在Service中添加服务

services.AddAuthentication().AddCookie().AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("521.org.cn"))
                };
            });

这段代码同时添加了Cookie 和 JWT

给Controller 或者 Action 添加 Attribute

[Authorize(AuthenticationSchemes = "Cookies, Bearer")]
    [ApiController]

当然,直接在Service.AddMvc()时,全局配置也可以。

登录时,写Cookie 以及生成Token

//写Cookie
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal);

//生成JWT
var tokenOptions = new JwtSecurityToken(
                    claims: userPrincipal.Claims,
                    expires: DateTime.Now.AddDays(1),
                    signingCredentials: signinCredentials
                );
new JwtSecurityTokenHandler().WriteToken(tokenOptions);

如果只需要其中一种认证方式,在代码中摘取相应代码就可以了。上面代码是认证的主要代码片段,供参考。