文章目录
0、引言
若不清楚什么是JWT
的请先了解下什么是JWT。
1、关于Authentication与Authorization
我相信在aspnet core中刚接触甚至用了段时间这两个概念的时候都是一头雾水的,傻傻分不清。
认证(Authentication)和授权(Authorization)在概念上比较的相似,且又有一定的联系,因此很容易混淆。
认证(Authentication)
是指验证用户身份的过程,即当用户要访问受保护的资源时,将其信息(如用户名和密码)发送给服务器并由服务器验证的过程。
授权(Authorization)
是验证一个已通过身份认证的用户是否有权限做某件事情的过程。
有过RBAC
的开发经验者来说这里可以这么通俗的来理解:认证是验证一个用户是否“合法”(一般就是检查数据库中是否有这么个用户),授权是验证这个用户是否有做事情的权限(简单理解成RBAC中的用户权限)。
2、整个认证流程是怎样的?
从图中可以看到整个认证、授权的流程,先进行身份验证 ,验证通过后将Token放回给客户端,客户端访问资源的时候请求头中添加Token信息,服务器进行验证并于授权是否能够访问该资源。
3、开始JWT身份认证
3.1 安装JwtBearer包
在.csproj项目中添加JWT包(这里添加有很多种方式,自行选择)
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.3" />
3.2 安装Swashbuckle.AspNetCore包
这里便于进行测试,引入Swagger工具。
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.3.1" />
3.3 添加身份认证相关服务到容器中
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = false,
ValidateIssuerSigningKey = true,
ValidIssuer = "jonny",
ValidAudience = "jonny",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretsecretsecret"))
};
});
说明
配置项 | 类型 | 说明 |
---|---|---|
ValidateIssuerSigningKey | bool | 是否调用对签名securityToken的SecurityKey进行验证。 |
ValidIssuer | string | 将用于检查令牌的发行者是否与此发行者相同。 |
ValidateIssuer | bool | 是否验证发行者 |