技术领域
[0001] 本发明涉及单点登录鉴权技术领域,具体为一种基于Token验证的单点登录的鉴权方法及系统。
相关背景技术
[0002] 单点登录鉴权技术,是指一种身份验证和授权机制,允许用户通过一次登录获取对多个服务器或系统的访问权限,而无需在每个服务器中单独进行身份验证,它的核心目标是提供简化的用户体验,减少用户需要记住和管理的登录凭据数量,并提高系统的安全性。
[0003] 现有的单点登录鉴权技术通常都是通过Token验证的方式对单点登录进行鉴权验证,而现有的Token验证会挤占更多的带宽,且在对Token进行验证时的性能不足,导致验证的过程较长,在用户进行跳转时往往需要更多的时间进行验证并跳转,降低了用户的体验,比如在申请公开号为:“CN112543180A”的中国专利中,公开了“基于Token实现多认证鉴权中心单点登陆的系统及方法”,该方案基于Token就是现有的Token验证技术,缺点是会挤占更多的带宽且降低了用户的体验,现有的单点登录鉴权技术还存在Token验证会挤占更多的带宽且在进行验证时的效率不足,导致用户的使用体验有所下降的问题。
具体实施方式
[0017] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0018] 实施例1,请参阅图1所示,第一方面,本申请提供一种基于Token验证的单点登录的鉴权方法,包括如下步骤:请参阅图2所示,步骤S1,用户在服务器中进行登录;步骤S1包括如下子步骤:
步骤S101,用户打开服务器进入登录页面;
步骤S102,用户输入账户名;
步骤S103,用户输入账户密码;
具体实施中,用户的登录采用现有技术,获取到用户输入的账户名为“admin123”,账户密码为“password123”。
[0019] 步骤S2,验证用户的登录信息是否有效;步骤S2包括如下子步骤:步骤S201,读取账户信息数据库;
步骤S202,查找账户信息数据库内是否存在与账户名相同的账户数据,若存在,则
输出密码确认信号;若不存在,则输出账号错误信号;
步骤S203,若输出密码确认信号,则将与账户名相同的账户数据标记为比对数据,
将比对数据对应的密码数据与账户密码进行比对,若密码数据与账户密码相同,则输出登录成功信号;若密码数据与账户密码不同,则输出密码错误信号;
具体实施中,账户信息数据库存储于服务器的后台数据库中,用于确认用户的登
录信息,通过查找得到账户信息数据库中存在账号“admin123”,输出密码确认信号,获取到账户信息数据库中admin123对应的密码数据为“password123”,通过比对得到密码数据与账户密码相同,输出登录成功信号。
[0020] 请参阅图3所示,步骤S3,在登录信息有效时生成Token并发送给应用程序;步骤S3包括如下子步骤:步骤S301,Token包括访问Token和refresh_Token;当输出登录成功信号后,获取
当前的时间,标记为发放时间;
步骤S302,从编码数据库中随机抽取加密编码,加密编码为随机大写字母以及数
字组成的六位字符的编码;
步骤S303,设置访问Token的失效时长,标记为第一失效时长,计算发放时间加第
一失效时长得到访问Token的失效时间,标记为第一失效时间;
具体实施中,输出了登录成功信号,获取到发放时间为13:24:36,设置第一失效时
长为20min,计算得到第一失效时间为13:44:36,随机抽取得到加密编码为“ABC123”;
步骤S304,通过加密编码对用户id和第一失效时间进行加密,得到已加密id以及
已加密失效时间;
步骤S304包括如下子步骤:
步骤S3041,获取加密编码最后一位字符在ASCII编码表中对应的十进制数字,标
记为编码判断符,若编码判断符为偶数,则输出第一编码信号;若编码判断符为奇数,则输出第二编码信号;
步骤S3042,基于ASCII编码表将加密编码转换为二进制编码,标记为待执行编码;
具体实施中,加密编码最后一位字符为3,在ASCII编码表中对应的十进制数字为
51,51为奇数,则输出第二编码信号;将加密编码转换为二进制编码得到待执行编码为“01
0000010100001001000011001100010011001000110011”;
步骤S3043,统计待执行编码中数字“1”以及数字“0”的数量,分别标记为第一数字数以及第二数字数;
步骤S3044,将用户id和第一失效时间按照ASCII编码表转换为十六进制编码,分
别标记为id编码以及时间编码,其中,将用户id中的每个字符转换后得到的十六进制编码命名为id元素编码,将第一失效时间中的每个字符转换后得到的十六进制编码命名为时间元素编码;
具体实施中,统计得到第一数字数为17,第二数字数为31;获取到用户id为
User123,包括字符U、s、e、r、1、2以及3,转换为十六进制编码得到id元素编码依次为55、73、
65、72、1、2以及3;组合得到id编码为55736572123;第一失效时间为13:44:36,包括字符1、
3、:、4、4、:、3以及6,转换为十六进制编码得到时间元素编码依次为1、3、3A、4、4、3A、3以及
6,组合得到时间编码为133A443A36;
步骤S3045,基于输出的第一编码信号以及第二编码信号对用户id和第一失效时
间进行加密;
步骤S3045包括如下子步骤:
步骤S3045.1,若输出第一编码信号,则将id编码中的每个id元素编码增加第一数
字数并减去第二数字数,计算完成后得到id更新编码;将时间编码中的每个时间元素编码增加第二数字数并减去第一数字数,计算完成后得到时间更新编码;
步骤S3045.2,设置编码规则,将id更新编码以及时间更新编码中的数字更改为字
母,数字0到9的对应的字母依次为P、H、Y、I、K、S、L、N、V以及G,数字‑1至‑9对应的字母依次为O、R、T、J、M、W、Q、Z以及X;
步骤S3045.3,编码规则设置完成后,按照十六进制编码,将id更新编码以及时间
更新编码中奇数对应的字母转换为小写,得到已加密id以及已加密失效时间;
步骤S3045.4,若输出第二编码信号,则将id编码中的每个id元素编码增加第二数
字数并减去第一数字数,计算完成后得到id更新编码;将时间编码中的每个时间元素编码增加第一数字数并减去第二数字数,计算完成后得到时间更新编码;
步骤S3045.5,设置编码规则,将id更新编码以及时间更新编码中的数字更改为字
母,数字0到9的对应的字母依次为U、O、R、T、J、M、W、Q、Z以及X,数字‑1至‑9对应的字母依次为H、Y、I、K、S、L、N、V以及G;
步骤S3045.6,编码规则设置完成后,按照十六进制编码,将id更新编码以及时间
更新编码中偶数对应的字母转换为小写,得到已加密id以及已加密失效时间;
具体实施中,由于输出了第二编码信号,本实施例中不再对第一编码信号对应的
处理过程进行具体说明,id编码中的id元素编码依次为55、73、65、72、1、2以及3,增加第二数字数并减去第一数字数后得到id更新编码依次为69、87、79、86、15、16以及17,基于编码规则更改得到id更新编码依次为WX、ZQ、QX、ZW、OM、OW以及OQ;时间编码中的时间元素编码依次为1、3、3A、4、4、3A、3以及6,增加第二数字数并减去第一数字数后得到时间更新编码依次为15、17、4E、18、18、4E、17以及20,基于编码规则更改得到时间更新编码依次为OM、OQ、JE、OZ、OZ、JE以及RU;编码规则中,U、R、J、W以及Z对应的数字为偶数,十六进制编码中,B、D以及F对应的数字为偶数,因此将U、R、J、W、Z、B、D以及F转换为小写,得到已加密id为wXzQQXzWOMOwOQ,已加密时间为OMOQjEOzOzjEru;
步骤S305,加密完成后对加密编码进行编码加密,得到已加密编码,同时生成
refresh_Token存储到本地存储内,对已加密编码、已加密id以及已加密失效时间进行组合得到访问Token;
步骤S305包括如下子步骤:
步骤S3051,对加密编码中的每个字符按照从左到右的顺序进行编号,得到字符编
号,通过符号Sn表示,n为正整数且n为字符编号的序号;
步骤S3052,基于ASCII编码表将Sn对应的字符转换为八位的二进制编码,得到Bn,
n与Sn中的n相对应;
具体实施中,加密编码为“ABC123”,编号得到S1至S6依次为A、B、C、1、2以及3,编码转换得到B1至B6依次为01000001、01000010、01000011、00110001、00110010以及00110011;
步骤S3053,按照n等于一至六的顺序,将Bn分别与“00100000”、“00010000”、
“00001000”、“00000100”、“00000010”以及“00000001”相加,得到Pn,n与Bn中的n相对应;
具体实施中,将01000001与00100000相加,得到P1为01100001;将01000010与
00010000相加,得到P2为01010010;将01000011与00001000相加,得到P3为01001010;将
00110001与00000100相加,得到P4为00110101;将00110010与00000010相加,得到P5为
00110100,将00110011与00000001相加,得到P6为00110100;
步骤S3054,基于ASCII编码表将Pn转换为字符并按照n从小到大的顺序拼接,得到
已加密编码;
步骤S3055,对已加密编码、已加密id以及已加密失效时间按照“已加密编码.已加
密id.已加密失效时间”的格式进行组合,得到访问Token,将访问Token发送至应用程序;
步骤S3056,生成refresh_Token存储到本地存储内,refresh_Token内存储有第二
失效时间;
具体实施中,基于ASCII编码表将Pn转换为字符得到P1至P6依次为a、R、J、5、4以及
4,拼接得到已加密编码为aRJ544,组合得到访问Token为“aRJ544.wXzQQXzWOMOwOQ.OMOQjEOzOzjEru”,由于refresh_Token仅存储在本地存储中,不用考虑带宽占用问题以及存储问题,因此refresh_Token采用现有的refresh_Token技术生成。
[0021] 步骤S4,当用户需要跳转浏览页面时,应用程序需要获取服务器内用户的用户信息,此时应用程序向服务器发送请求时携带Token,应用程序接收Token并对Token进行有效性验证,验证通过后向跳转页面提供用户的信息授权;步骤S4包括如下子步骤:步骤S401,当用户需要跳转浏览页面时,应用程序向服务器发送请求时携带访问
Token;
步骤S402,接收访问Token,访问Token由已加密编码、已加密id以及已加密失效时
间组成,获取已加密编码以及已加密失效时间;
步骤S403,对已加密编码进行解密,得到解密编码;
步骤S404,基于解密编码对已加密失效时间进行解密,得到第一失效时间;
步骤S405,获取当前时间,标记为实时时间,比对实时时间是否超过了第一失效时
间,若实时时间超过了第一失效时间,则输出refresh_Token验证信号;若实时时间未超过第一失效时间,则输出Token有效信号;
步骤S406,若输出Token有效信号,则对已加密id进行解密,得到用户id并申请用
户的用户信息;
具体实施中,接收访问Token为“aRJ544.wXzQQXzWOMOwOQ.OMOQjEOzOzjEru”,其
中,已加密编码为“aRJ544”,已加密失效时间为“OMOQjEOzOzjEru”,对已加密编码进行解密的过程与对加密编码的加密过程相反,因此本实施例中不再进行具体展示,解密得到解密编码为“ABC123”,通过ABC123对已加密失效时间进行解密,已加密失效时间的解密过程与第一失效时间的加密过程也相反,因此本实施例不再进行具体展示,解密得到第一失效时间为13:44:36,获取到实时时间为13:49:24,通过比对得到实时时间超过了第一失效时间,则输出refresh_Token验证信号;
步骤S407,若输出refresh_Token验证信号,则通过refresh_Token对此次请求进
行验证;
步骤S407包括如下子步骤:
步骤S4071,从本地存储中获取refresh_Token的第二失效时间;
步骤S4072,比对实时时间是否超过了第二失效时间,若实时时间超过了第二失效
时间,则输出Token失效信号;若实时时间未超过第二失效时间,则输出Token更新信号;
步骤S4073,若输出Token更新信号,生成新的访问Token以及refresh_Token,并对
已加密id进行解密,得到用户id并申请用户的用户信息;若输出Token失效信号,则返回401界面;
具体实施中,由于输出了refresh_Token验证信号,因此从本地存储中获取
refresh_Token得到refresh_Token的第二失效时间为2024.05.12,实时时间为2024.05.05的13:49:24,通过对比日期得到实时时间未超过第二失效时间,则输出Token更新信号,重新生成访问Token以及refresh_Token,再对已加密id进行解密得到用户id为“admin12”,通过用户id向服务器申请用户的用户信息。
[0022] 实施例2,本实施例与实施例1的不同之处在于,实施例1仅解释了第二编码信号的分析过程,而本实施例用于对第一编码信号的分析过程进行补充说明,本实施例中的加密编码为“ABC124”,通过分析输出了第一编码信号;步骤S3041,获取加密编码最后一位字符在ASCII编码表中对应的十进制数字,标
记为编码判断符,若编码判断符为偶数,则输出第一编码信号;若编码判断符为奇数,则输出第二编码信号;
步骤S3042,基于ASCII编码表将加密编码转换为二进制编码,标记为待执行编码;
具体实施中,加密编码最后一位字符为4,在ASCII编码表中对应的十进制数字为
52,52为偶数,则输出第一编码信号;将加密编码转换为二进制编码得到待执行编码为“01
0000010100001001000011001100010011001000110100”;
步骤S3043,统计待执行编码中数字“1”以及数字“0”的数量,分别标记为第一数字数以及第二数字数;
步骤S3044,将用户id和第一失效时间按照ASCII编码表转换为十六进制编码,分
别标记为id编码以及时间编码,其中,将用户id中的每个字符转换后得到的十六进制编码命名为id元素编码,将第一失效时间中的每个字符转换后得到的十六进制编码命名为时间元素编码;
具体实施中,统计得到第一数字数为16,第二数字数为32;获取到用户id为
User123,包括字符U、s、e、r、1、2以及3,转换为十六进制编码得到id元素编码依次为55、73、
65、72、1、2以及3;组合得到id编码为55736572123;第一失效时间为13:44:36,包括字符1、
3、:、4、4、:、3以及6,转换为十六进制编码得到时间元素编码依次为1、3、3A、4、4、3A、3以及
6,组合得到时间编码为133A443A36;
步骤S3045,基于输出的第一编码信号以及第二编码信号对用户id和第一失效时
间进行加密;
步骤S3045包括如下子步骤:
步骤S3045.1,若输出第一编码信号,则将id编码中的每个id元素编码增加第一数
字数并减去第二数字数,计算完成后得到id更新编码;将时间编码中的每个时间元素编码增加第二数字数并减去第一数字数,计算完成后得到时间更新编码;
步骤S3045.2,设置编码规则,将id更新编码以及时间更新编码中的数字更改为字
母,数字0到9的对应的字母依次为P、H、Y、I、K、S、L、N、V以及G,数字‑1至‑9对应的字母依次为O、R、T、J、M、W、Q、Z以及X;
步骤S3045.3,编码规则设置完成后,按照十六进制编码,将id更新编码以及时间
更新编码中奇数对应的字母转换为小写,得到已加密id以及已加密失效时间;
具体实施中,输出了第一编码信号,id编码中的id元素编码依次为55、73、65、72、
1、2以及3,增加第一数字数并减去第二数字数后得到id更新编码依次为39、57、49、56、‑
15、‑14以及‑13,基于编码规则更改得到id更新编码依次为IG、SN、KG、SL、OS、OK以及OI;时间编码中的时间元素编码依次为1、3、3A、4、4、3A、3以及6,增加第一数字数并减去第二数字数后得到时间更新编码依次为‑15、‑13、24、‑12、‑12、24、‑13以及‑10,基于编码规则更改得到时间更新编码依次为OS、OI、YK、OY、OY、OI以及OP;编码规则中,P、Y、K、L、V、R、J、W以及Z对应的数字为偶数,十六进制编码中,B、D以及F对应的数字为偶数,因此将P、Y、K、L、V、R、J、W、Z、B、D以及F转换为小写,得到已加密id为IGSNkGSlOSOkOI,已加密时间为OSOIykOyOyOIOp。
[0023] 实施例3,请参阅图4所示,第二方面,本申请提供一种基于Token验证的单点登录的鉴权系统,包括用户登录模块、登录验证模块、Token生成模块以及Token验证模块;用户登录模块、登录验证模块以及Token验证模块分别与Token生成模块数据连接;用户登录模块用于用户在服务器中进行登录;
用户登录模块配置有用户登录策略,用户登录策略包括:
用户打开服务器进入登录页面;
用户输入账户名;
用户输入账户密码;
登录验证模块用于验证用户的登录信息是否有效;
登录验证模块配置有登录验证策略,登录验证策略包括:
读取账户信息数据库;
查找账户信息数据库内是否存在与账户名相同的账户数据,若存在,则输出密码
确认信号;若不存在,则输出账号错误信号;
若输出密码确认信号,则将与账户名相同的账户数据标记为比对数据,将比对数
据对应的密码数据与账户密码进行比对,若密码数据与账户密码相同,则输出登录成功信号;若密码数据与账户密码不同,则输出密码错误信号;
Token生成模块用于在登录信息有效时生成Token并发送给应用程序;Token生成
模块包括初始生成单元、编码处理单元、编码加密单元以及Token生成单元;
初始生成单元配置有初始生成策略,初始生成策略包括:
Token包括访问Token和refresh_Token;当输出登录成功信号后,获取当前的时
间,标记为发放时间;
从编码数据库中随机抽取加密编码,加密编码为随机大写字母以及数字组成的六
位字符的编码;
设置访问Token的失效时长,标记为第一失效时长,计算发放时间加第一失效时长
得到访问Token的失效时间,标记为第一失效时间;
通过加密编码对用户id和第一失效时间进行加密,得到已加密id以及已加密失效
时间;
加密完成后对加密编码进行编码加密,得到已加密编码,同时生成refresh_Token
存储到本地存储内,对已加密编码、已加密id以及已加密失效时间进行组合得到访问Token;
编码处理单元配置有编码处理策略,编码处理策略包括:
获取加密编码最后一位字符在ASCII编码表中对应的十进制数字,标记为编码判
断符,若编码判断符为偶数,则输出第一编码信号;若编码判断符为奇数,则输出第二编码信号;
基于ASCII编码表将加密编码转换为二进制编码,标记为待执行编码;
统计待执行编码中数字“1”以及数字“0”的数量,分别标记为第一数字数以及第二数字数;
将用户id和第一失效时间按照ASCII编码表转换为十六进制编码,分别标记为id
编码以及时间编码,其中,将用户id中的每个字符转换后得到的十六进制编码命名为id元素编码,将第一失效时间中的每个字符转换后得到的十六进制编码命名为时间元素编码;
基于输出的第一编码信号以及第二编码信号对用户id和第一失效时间进行加密;
编码加密单元配置有编码加密策略,编码加密策略包括:
若输出第一编码信号,则将id编码中的每个id元素编码增加第一数字数并减去第
二数字数,计算完成后得到id更新编码;将时间编码中的每个时间元素编码增加第二数字数并减去第一数字数,计算完成后得到时间更新编码;
设置编码规则,将id更新编码以及时间更新编码中的数字更改为字母,数字0到9
的对应的字母依次为P、H、Y、I、K、S、L、N、V以及G,数字‑1至‑9对应的字母依次为O、R、T、J、M、W、Q、Z以及X;
编码规则设置完成后,按照十六进制编码,将id更新编码以及时间更新编码中奇
数对应的字母转换为小写,得到已加密id以及已加密失效时间;
若输出第二编码信号,则将id编码中的每个id元素编码增加第二数字数并减去第
一数字数,计算完成后得到id更新编码;将时间编码中的每个时间元素编码增加第一数字数并减去第二数字数,计算完成后得到时间更新编码;
设置编码规则,将id更新编码以及时间更新编码中的数字更改为字母,数字0到9
的对应的字母依次为U、O、R、T、J、M、W、Q、Z以及X,数字‑1至‑9对应的字母依次为H、Y、I、K、S、L、N、V以及G;
编码规则设置完成后,按照十六进制编码,将id更新编码以及时间更新编码中偶
数对应的字母转换为小写,得到已加密id以及已加密失效时间;
Token生成单元配置有Token生成策略,Token生成策略包括:
对加密编码中的每个字符按照从左到右的顺序进行编号,得到字符编号,通过符
号Sn表示,n为正整数且n为字符编号的序号;
基于ASCII编码表将Sn对应的字符转换为八位的二进制编码,得到Bn,n与Sn中的n
相对应;
按照n等于一至六的顺序,将Bn分别与“00100000”、“00010000”、“00001000”、“00000100”、“00000010”以及“00000001”相加,得到Pn,n与Bn中的n相对应;
基于ASCII编码表将Pn转换为字符并按照n从小到大的顺序拼接,得到已加密编
码;
对已加密编码、已加密id以及已加密失效时间按照“已加密编码.已加密id.已加
密失效时间”的格式进行组合,得到访问Token,将访问Token发送至应用程序;
生成refresh_Token存储到本地存储内,refresh_Token内存储有第二失效时间;
Token验证模块用于当用户需要跳转浏览页面时,应用程序需要获取服务器内用
户的用户信息,此时应用程序向服务器发送请求时携带Token,应用程序接收Token并对Token进行有效性验证,验证通过后向跳转页面提供用户的信息授权;Token验证模块包括访问Token验证单元以及refresh_Token验证单元;
访问Token验证单元配置有访问Token验证策略,访问Token验证策略包括:
当用户需要跳转浏览页面时,应用程序向服务器发送请求时携带访问Token;
接收访问Token,访问Token由已加密编码、已加密id以及已加密失效时间组成,获
取已加密编码以及已加密失效时间;
对已加密编码进行解密,得到解密编码;
基于解密编码对已加密失效时间进行解密,得到第一失效时间;
获取当前时间,标记为实时时间,比对实时时间是否超过了第一失效时间,若实时
时间超过了第一失效时间,则输出refresh_Token验证信号;若实时时间未超过第一失效时间,则输出Token有效信号;
步骤S406,若输出Token有效信号,则对已加密id进行解密,得到用户id并申请用
户的用户信息;
若输出refresh_Token验证信号,则通过refresh_Token对此次请求进行验证;
refresh_Token验证单元配置有refresh_Token验证策略,refresh_Token验证策
略包括:
从本地存储中获取refresh_Token的第二失效时间;
比对实时时间是否超过了第二失效时间,若实时时间超过了第二失效时间,则输
出Token失效信号;若实时时间未超过第二失效时间,则输出Token更新信号;
若输出Token更新信号,生成新的访问Token以及refresh_Token,并对已加密id进
行解密,得到用户id并申请用户的用户信息;若输出Token失效信号,则返回401界面。
[0024] 在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0025] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。其中,存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read‑Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Read‑Only Memory,简称PROM),只读存储器(Read‑OnlyMemory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0026] 在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。