基于.net core3.1的JWT授权01
目标:完成Token的分发及简单授权
什么是认证授权
- 以做火车为例,认证就是检查你的身份证,授权就是查你车票看你能上那列车。
安装nuget包
- nuget管理器中安装 Microsoft.AspNetCore.Authentication.JwtBearer
依赖注入JWTBearer认证服务
- StartUp.cs中添加以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SecurityKey securityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("laozhang"));
services.AddAuthentication("Bearer")
.AddJwtBearer(o => {
o.TokenValidationParameters = new TokenValidationParameters()
{
//3+2
// 配置数字签名
ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey,
// 配置发行人参数
ValidateIssuer = true,
ValidIssuer = "issure",
// 配置使用人参数
ValidateAudience = true,
ValidAudience = "audience",
// 验证过期时间 // 验证生命周期
RequireExpirationTime = true,
ValidateLifetime = true
};
});
添加生成令牌的控制器(对新手不会就百度,我记得我第一次写.net core着实不会QAQ)
- 代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[Route("[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
public string GetToken()
{
//3+2
SecurityToken securityToken = new JwtSecurityToken(
signingCredentials: new SigningCredentials(
new SymmetricSecurityKey(Encoding.ASCII.GetBytes("laozhanglaozhanglaozhanglaozhanglaozhang")),
SecurityAlgorithms.HmacSha256),
issuer: "issure",
audience: "audience",
expires: DateAndTime.Now.AddHours(1),
//授权策略
claims: new Claim[] { }
);
return new JwtSecurityTokenHandler().WriteToken(securityToken);
}
}
开启认证中间件
- 在startup.cs的 app.UseRouting(); 后添加 app.UseAuthentication(); 和 app.UseAuthorization();
API添加权限过滤器
- controller上添加[Authorize]
测试
-
访问api (http://localhost:5000/Login) 获取token
-
使用postman get请求 http://localhost:5000/api/weatherforecast 在headers列中添加 Authorization 值为 Bearer+’ ‘+token
1
eg:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTM5NDUyMDIsImlzcyI6Imlzc3VyZSIsImF1ZCI6ImF1ZGllbmNlIn0.-Rwpq13Qa4vNCKzwmiIXweM5jk9YE0trGNW3iA5-exg
容易忽略的错误
-
密钥长度
-
认证开启 authentication
源码
- https://github.com/jianba/.net-vue/commit/1c8ec9336147d1cc34da0c9ed17ac3672424a3f0
Q&A
-
角色授权,策略授权?
-
此时的swagger失效要怎么解决