一种绝对安全的跳转单点登陆方法

第一次请求post:
1. client 生成随机数a, g, p
2. client 通过A = g^a mod p,得到A,再带着a, g, A,以及用户名hash名,发送请求给server
3. server拿到a, g, A,以及用户名hash,对应生成一个随机数b,则得到B=g^b mod p,把B返回给client
4. server通过查询用户名hash列表,得到真实用户名
4. server通过K=A^b mod p,得到一个共享密钥K,这个共享密钥对应请求的用户名
5. client拿到返回的B,通过K=B^a mod p,也能够拿到一个共享密钥K

第二次请求post:
1. client通过K对用户密码加密,得到passwd_sec
2. client再使用passwd_sec和用户名hash进行登录token获取的请求
3. server拿到passwd_sec,使用共享密钥K解密出passwd,查询用户名hash列表,得到真实用户名
4. 核对用户名和密码,确认登录状态,生成登陆token,返回给client

第三次请求get:
1. client拿到token,直接使用token_new = token+用户名hash+refer,然后使用共享密钥K进行加密,直接使用token_new单一参数进行请求
2. server接收到这个字符串之后,使用K进行解密,得到token和用户名hash以及refer,进行refer校验是否在白名单内,进行登陆操作,并且转跳到登录成功后的页面。

每一个请求即使被拦截了也毫无意义,因为单纯从返回的字段内容,是无法得到有用信息的。即使把所有请求都拦截了,并且解析出明文数据,依旧无用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值