网站首页 > 币百科 >

接口令牌生成器_后端如何生成令牌

2023-05-19 20:24:24 币百科 阅读 0

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

我们拥有多年的区块链服务经验,为用户提供专业的服务信息。下面介绍接口令牌生成器,以及如何在后端生成令牌。精选可以随时随地解决玩币遇到的各种问题,让你再也不用担心职称评定这种繁琐的业务。

JWT(jsonwebtoken)是一个基于json的开放标准,实现它是为了在网络应用环境之间传递声明。

JWT';的声明通常用于在身份提供者和服务提供者之间传输经过身份验证的用户身份信息,以便从资源服务器获取资源。例如用于登录。

shiro(9)-有状态认证和无状态认证的区别

JWT由三部分组成:头部、有效载荷和签名。。报头定义了类型和加密方法;负载部分不是很重要的数据;签名使用定义的加密方法在base64和自加密密钥之后加密头和有效负载。.Thelasttokenconsistsofbase64(header),base64(payload)andbase64(signature)

Suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas:suchas

JWT的头是一个描述JWT元数据的JSON对象。

一个完整的头类似于下面的json。

然后对报头进行base64加密,形成第一部分:

eyjhbgcioijiuzi1NIISINR5ccci6ikpxvcj9

Load是存储有效信息的地方,这些有效部分包括三个部分。

任何信息都可以添加到公开声明中。一般要添加用户的相关信息或者业务需要的其他必要信息,但不建议添加敏感信息,因为这部分可以在客户端解密。

私有语句是由提供者和消费者共同定义的语句,一般不建议存储敏感信息。因为base64是对称解密的,意味着这部分信息可以归为明文信息。

定义一个有效载荷:

然后用base64加密得到第二部分

eyjvccmcioilku4ml6xlptmnaeilcjuyw1ijoirnjlzeegewgncisimv4CCI6mtuxndm1njewywiawf0ijoxnte0mzu2mdqzlcjhz2uioioiiyocjj9

JWT的第三部分是签证信息,由三部分组成:

这部分需要一个由base64加密的头和base64加密的有效载荷组成的字符串。,然后通过头中声明的加密方法进行盐密组合加密,构成了jwt的第三部分:

49uf72vskj-sa4ahiyn5eoz9nb4w5VB45pslf7x_NY。

注意:密钥存储在服务器中,服务器会根据这个密钥生成token并进行验证,所以要加以保护。

分析结果

重放攻击是攻击者获取客户端发送给服务器的数据包,原封不动地发送给服务器,不加修改地实现某些功能。比如客户端发给服务器的一个包的作用就是查询一些信息,攻击者拦截这个包。然后当你想查询这个信息的时候,把这个包发给服务器,服务器会做相应的操作,返回查询到的信息。

先访问验证接口。该接口输出根据用户信息生成的令牌(内容格式是任意的)和uid。然后为每个后续提交提交令牌和uid,服务器可以验证它。

令牌生成可以基于客户端信息,例如useragent。

JWT由三部分组成,分别是head(类型和加密算法)、包含公共信息和自定义信息的playboard(load)和signature(签名)。

eyj0exaioijkv1qilchbgcioijiuzi1nij9是头信息,采用对称加密算法base64加密。解密后的json格式如下。。报头信息由类型和alg(加密算法)组成。类型是"JWT";加密算法一般采用HMACSHA256加密算法。

eyjhdwqioiizotu4MTU4mdeilchlehaioje2mdyxmdc5ntesimlhdci6mtywnjewmdc1MX0就是负载信息,加密后的json格式如下。负载信息一般由标准语句、公共语句和私有语句组成。

iss:jwt发行方

sub:jwt目标用户

aud:jwt

接收方。

exp:jwt的到期时间,必须大于发行时间

nbf:定义此jwt不可用之前的时间。

IAT:JWT

的发行时间。

jti:jwt的唯一标识,主要用作一次性令牌,避免重放攻击。

公共报表和私有报表都可以添加任何信息,一般添加用户的相关信息或业务需要的其他必要信息。。但是不建议添加敏感信息,因为这部分可以在客户端解密。

签名的第三部分是由base64加密的头信息、净荷信息和秘密组成的签名,签名算法是基于头信息的加密算法。,一般是HMACSHA256。然后,报头、有效载荷和签名构成令牌。

pom.xml引入依赖关系

添加控制器,提供令牌接口

回调服务在生成token

时返回的例子如下:

定义自定义注释,在需要token验证的方法中添加

即可。

添加AuthenticationInterceptor拦截第三方请求,实现HandlerInterceptor接口

注册AuthenticationInterceptor拦截指定的请求路径

在本文中,我们对Token的定义、获取、验证等方法有了大致的了解。另外,Token的无国籍性。、可扩展性、多平台跨域等特点也使得Token在安全验证领域得到广泛应用。在后面的文章中,我将介绍如何使用SpringAOP进行加密、解密、签名验证等操作。

参考:

这需要由php后端生成。当登录成功后,后端通过算法将一些信息组合成一个令牌返回给app,app接收并保存。如果安全性要求很高,可以尽可能多地还原和解析这个令牌

。,可以在app端加密哈希一些用户信息或者mac/ip,生成token;通常只使用uuid生成一个随机值作为令牌。是否写入数据库看你的业务需求比如,如果服务器需要挂机重启,而客户端在挂机前可以用令牌正常访问,那么就需要将令牌写入数据库。

业务场景

在前后分离场景中,越来越多的项目使用token作为接口的安全机制,APP端或WEB端(用VUE、REACTJS等构建。)使用token与后端接口进行交互,达到安全目的。本文结合了stackover和自己的项目实践,试图总结出一个通用的,落地方案。

基本思路

用户只登录一次,如果用户修改密码,令牌作废,重新登录

1.0实现

1。登录成功,返回access_token和refresh_token,客户端缓存;2.使用access_token请求接口资源,成功则调用成功;如果令牌超时,客户端携带refresh_token调用中间件接口获取新的access_token3.在中间件接受刷新令牌的请求之后,它检查refresh_token是否已经过期。如果过期,它将拒绝刷新。在客户端接收到该状态后,,跳转到登录页面;如果未过期,则生成新的access_token和refresh_token,并将它们返回给客户端(如果可能,使旧的refresh_token无效)。,客户端携带新的access_token再次调用上述资源接口。4.客户端注销或更改密码后,调用中间件取消旧令牌(使access_token和refresh_token失效)。,清空客户端';saccess_token和refresh_toke同时出现。

后端表id用户id客户端id客户端密码刷新_令牌过期_in创建_日期del_flag

2.0实现

场景:access_token访问资源刷新_token授权访问设置固定时间X必须重新登录

1.登录成功。,jwt在后台生成access_token(jwt有效期30分钟)和refresh_token(jwt有效期15天)。,并缓存在redis中(hash-key是token,sub-key是手机号,value是设备的唯一号)(根据手机号可以手动废除所有token,也可以根据sub-key废除部分设备。),设置过期时间为1个月,保证最后可以删除所有令牌),返回后客户端缓存这两个令牌;2.使用access_token请求接口资源。,验证成功且redis中存在access_token(未撤销),则调用成功;如果令牌超时,中间件删除access_token(撤销);客户端再次携带refresh_token,调用中间件接口获取新的access_token3.在中间件接受刷新令牌的请求后,,检查refresh_token是否已过期。如果过期,拒绝刷新,删除refresh_token(取消);客户端收到状态后,跳转到登录页面;如果它还没有到期,检查缓存中是否有refresh_token(是否被废除),如果有,生成新的access_token并返回给客户端,然后客户端会用新的access_token再次调用资源接口。。4.客户端注销或更改密码后,调用中间件取消旧令牌(中间件删除access_token和refresh_token)。同时在客户端清除access_token和refresh_toke。5.如果手机丢失,可以根据手机号码手动作废指定用户设备关联的令牌。。6.刷新上面3中的access_token可以增加登录时间判断的最大时间。如果必须重新登录,将拒绝刷新令牌。(拒绝场景:无效、长时间未登录、频繁刷新)

2.0变化1。登录2。登录拦截器3。添加并刷新access_token接口4。退出登录5。修改密码

3.0实现

场景:自动续费长期不用,需要重新登录。

1。登录成功,jwt后台生成Access_token(JWT有效期30分钟)。,并缓存在redis中(hash-key为access_token,sub-key为手机号,value为设备的唯一号(根据手机号可以手动废除所有令牌)。,将access_token的过期时间设置为7天,以保证最终可以删除所有令牌),返回后客户端缓存此令牌;

2。使用access_token请求接口资源。,验证成功且redis中存在access_token(未撤销),则调用成功;如果令牌超时,中间件删除access_token(撤销),生成新的access_token并返回。。客户端接收新的access_token,并再次请求接口资源。

3。客户端注销或修改密码后,调用中间件注销旧令牌(中间件删除access_token)。同时在客户端清除access_token。

4。以上2,可以补充,最长X次必须根据登录时间重新登录,然后拒绝刷新令牌。(拒绝场景:长时间不登录,频繁刷新)

5。如果移动电话丢失,可以根据移动电话号码手动撤销与指定用户设备相关联的令牌。

3.0变更

1。登录2。登陆拦截者3号。注销4。修改密码

1.3场景:令牌过期,长时间不用需要重新登录

1。登录成功,后台jwt生成Access_Token(有效期7天)并缓存在redis中。,关键是"用户标识:访问令牌",值为access_token(根据用户ID,可以手动撤销指定用户的所有令牌),缓存过期时间设置为7天。,以确保最终可以删除所有令牌。请求返回后,客户端缓存这个access_token;

2。使用access_token请求接口资源。,验证成功且redis中存在access_token(未撤销),则调用成功;如果令牌超时,中间件删除access_token(撤销),生成新的access_token并返回。。客户端接收新的access_token,并再次请求接口资源。

3。客户端注销或修改密码后,调用中间件注销旧令牌(中间件删除access_token)。同时在客户端清除access_token。

4。以上2,可以补充,最长X次必须根据登录时间重新登录,然后拒绝刷新令牌。(拒绝场景:长时间不登录,频繁刷新)

5。如果移动电话丢失,可以根据移动电话号码手动撤销与指定用户设备相关联的令牌。

1.3更改

1。登录2。登陆拦截者3号。注销4。修改密码

2.0场景:access_token访问资源刷新_token授权访问设置固定时间X必须重新登录

1.登录成功。,jwt在后台生成access_token(jwt30分钟有效)和refresh_token(jwt15天有效),降速

保存到redis(hash-key是token,sub-key是手机号,value是设备的唯一号(根据手机号,可以手动废除所有

token。,你也可以根据子密钥废除一些设备的令牌。),将过期时间设置为1个月,以确保最终可以删除所有令牌。返回后,客户端缓存这两个令牌。

2。使用access_token请求接口资源。如果验证成功,且redis中存在access_token(未撤销),则调用成功;如果

令牌超时。,中间件删除access_token(撤销);客户端再次用refresh_token调用中间件接口,获得新的

access_token;

3。在中间件接受刷新令牌的请求之后,它检查refresh_token是否已经过期。

如果过期,拒绝刷新,删除refresh_token客户端收到状态后,跳转到登录页面;

如果未过期,检查缓存中是否有refresh_token(是否已撤销),如果有,则生成新的access_token并返回给

客户端。然后,客户机用新的access_token再次调用上述资源接口。

4。客户端注销或更改密码后。,调用中间件取消旧令牌(中间件删除access_token和refresh_token(

被废止)),同时清除客户端的access_token和refresh_token。

5。如果移动电话丢失,可以根据移动电话号码手动撤销与指定用户设备相关联的令牌。

6。3以上,刷新access_token可以根据登录时间增加最大x次,必须重新登录。此时,您拒绝刷新令牌。(

拒绝场景:无效、长时间未登录、频繁刷新)

2.0变更

1.登录

2。登录拦截器

3。添加并刷新access_token接口

4。注销登录

5。修改密码

3.0场景:长时间自动续费需要重新登录

1。,jwt在后台生成access_token(JWT30分钟有效)并缓存在redis中(hash-key为

)。

access_token,子密钥是手机号,value是设备的唯一号(根据手机号可以手动废除所有令牌,或者根据子密钥可以废除部分设备的

令牌。),将access_token的到期时间设置为1个月,以确保最终可以删除所有令牌(除了

)。返回后,客户端缓存这个令牌;

2。使用access_token请求接口资源。,验证成功且redis中存在access_token(未撤销),则调用成功;如果

令牌超时,中间件删除access_token(废除它),生成新的access_token并返回。。客户端接收到新的

访问令牌,并且

再次请求接口资源。

3。客户端注销或更改密码后。,调用中间件取消旧令牌(中间件删除access_token(已废除)),同时在客户端清除

access_token。

4。在上面2中可以补充,需要按照登录的最长时间重新登录,然后拒绝刷新令牌。(拒绝场景:我还没有';t登录时间长

频繁刷新

5。如果我的手机丢了。,您可以根据手机号码手动撤销与指定用户设备关联的令牌。

3.0变更

1。登录

2。登录拦截器

3。注销

4。修改密码[xy]

4.0场景:令牌过期,长时间不用需要重新登录

1。登录成功,后台jwt生成Access_Token(有效期7天)并缓存在redis中,key为

";用户标识:访问令牌"用户id,值为access_token(根据用户id,可以手动撤销指定用户的所有

令牌),缓存过期时间设置为7天。,以确保最终可以删除所有令牌。请求返回后,客户端缓存这个

access_token;

2。使用access_token请求接口资源。,验证成功且redis中存在access_token(未撤销),则调用成功;如果

令牌超时,中间件删除access_token(废除它),生成新的access_token并返回。。客户端接收到新的

访问令牌,并且

再次请求接口资源。

3。客户端注销或更改密码后。,调用中间件取消旧令牌(中间件删除access_token(已废除)),同时在客户端清除

access_token。

4。在上面2中可以补充,需要按照登录的最长时间重新登录,然后拒绝刷新令牌。(拒绝场景:我还没有';t登录时间长

频繁刷新

5。如果我的手机丢了。,您可以根据手机号码手动撤销与指定用户设备关联的令牌。

4.0变更

1。登录

2。登录拦截器

3。注销

4。修改密码[xy]

最终实现

后端

关于接口令牌生成器和后端如何生成令牌的介绍到此结束。你从中找到你需要的信息了吗?如果你想了解更多。

相关内容

接口令牌生成器_后端如何生成令牌文档下载.: PDF DOC TXT

猜你喜欢