C# Jwt

367 阅读2分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

引言

单点登录指的是当业务系统横跨多个域名(主机)时,也需要把用户的登录信息传递过去,但是传过去的信息在别的项目又得经过一次认证。 而使用jwt可以很好的解决这一问题...

关于Jwt的定义:

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

如何在Asp.Net core中引入jwt

1.1 导入Nuget包

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer

1.2 在Startup中配置服务

public void ConfigureServices(IServiceCollection services)
{
     services.AddAuthentication(options =>
     {
            options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
     })
     .AddJwtBearer();
}

使用Redis缓存用户信息

通常我们不会在token里面存储太多信息,因为这样会使token的长度变的很长。且有些信息我们不想给客户端获取到, 只要客户端拿到了token就可以获取到token里的全部信息

所以通常我们会选择缓存用户信息到。避免每次查询用户都得去数据库拿值。这个缓存的时效性可以设置为5~30分钟(具体看业务需求),同时需注意:更改用户信息之后,需将存在缓存中的用户信息删除

解决token时效性问题

验证完用户登录信息之后,在我们token(有效期)过期之前。这个token都是能在应用程序内畅通无阻的,但是这又会会引发另一个问题。

比如说:用户登录系统之后,访问了另一个系统。并且在这个系统修改了密码。于是这个系统多了一个新token。这没有什么问题。奇怪的是,修改密码之前那个token竟然还是有效。

所以,针对此问题。需要重写一下验证token的逻辑。在验证其合法性时。还需要标明该token目前可用