首页 > 编程知识 正文

基于token的单点登录认证,token实现单点登录

时间:2023-05-03 14:21:23 阅读:132248 作者:1142

单点登录方案:

用户在第一次成功登录后,将token发布到前端页面。 每个请求都携带此token,并将其放入请求标头。 后端根据密钥检查是否启用了token,如果密钥中的任何信息发生更改,token将禁用。 检查通过后,将生成新的token并发布到前端,更新有效时间。

缺点:

每次更新token都会影响性能

注意:

私钥和算法用于生成签名,令牌本身无法读取只用于base64url编码,可以直接解密,密钥只用于验证token是否有效。

JWT由三部分组成:标头信息、有效载荷和签名,中间用.分隔,如下所示:

aaa.bbb.ccc的具体构成请参考下图

一、header (标题信息) )。

令牌类型(JWT )、散列算法(HMAC、RSASSA、RSASSA-PSS等)两部分组成

二.有效载荷

JWT的第二部分是payload,其中包含claims。 claims是关于实体(最常用的是用户信息)和其他数据的声明,claims有注册、公共、和私有三种。

注册剪辑:这些是预定义的剪辑集,不是强制的,但建议使用iss、exp、sub、aud等。

请注意,公共claims :自定义claims不要与JWT注册表中的属性冲突。 可以在此确认JWT注册表

Private claims:这些是定制的claims,用于在同意使用这些claims的利益相关方之间共享信息。 它们既不是注册剪辑,也不是公共剪辑。

三.信号

要创建签名部分,必须使用由编码的Header、编码的Payload、私钥和Header指定的算法并对其签名。

ependencygroupidcom.auth0/groupidartifactidjava-jwt/artifactidversion3.2.0/version/dependency密钥是根据特定需要生成的

以下密钥的生成是模拟用户id、用户修改时间、上次登录时间、上次注销时间、ip、浏览器信息、salt (前端随机生成,窗口唯一)、之后是有关角色的信息等。

publicstaticvoidmain (字符串[ ] args ) throwsexception )/userid,updated time,last login time,last logout time,ip,usimime roleupdatedtime2string secret key=' 11,11111111,login_time,logout_time,127.0.0.1 //加密算法algorithm algoogout JT creator.builder builder=jwt.create (.with issuer ) ) is sure (.with subject ) ) test )//到期日期(.withexpiresat ) ) string token=builder.sign (algorithm ); system.out.println (' token=' token ); 获取token信息的decodedjwtdecodedjwt=jwt.decode (token ); system.out.println (' userid=' decoded jwt.getclaim (' userid ' ).asString ) ); 检查token是否有效decodedjwtverifyjwt=verify jwt (token,secretKey ); system.out.println (verify jwt=' verify jwt ); } publicstaticdecodedjwtverifyjwt (字符串令牌,字符串安全密钥) try ) algorithm algorithm=algorithm.hmac 256 ) secret key ecodedjwtjwt=verifier.verify (token ); 返回jwt; }catch(exceptione ) system.out.println ) (errortoken ); }返回空值; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。