.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);
如果只需要其中一种认证方式,在代码中摘取相应代码就可以了。上面代码是认证的主要代码片段,供参考。
评论