内部系统登录

  • 以admin登录为例,首先用户访问admin页面,点击使用员工系统账号登录,前端调用admin项目的login接口,此接口无参数。(后端会往cookie中放一个随机session,并将该session和过期时间保存)
    在这里插入图片描述
  • admin的login接口拼接一个url,这个url的地址是员工系统(staff)的登录页面,参数是admin项目的client_id和一个随机的MD5值(state),后端拼接好返回给前端。这个链接长这个样子:
https://staff.xxxx.com/auth?client_id=j606-gPZa9E0&state=78ccec1fec1c7e47bbc94855e8fb5741
  • 前端拿到这个链接,进行访问,跳转到员工系统的登录页。

在这里插入图片描述

  • 用户输入用户名和密码,前端将用户名、密码、要登陆的系统的client_id(j606-gPZa9E0)和state(78ccec1fec1c7e47bbc94855e8fb5741)作为参数,请求staff的/oauth/login接口,该接口做以下几件事:
    • 先校验用户名和密码,得到uid。
    • 同时根据client_id,得到要登陆系统的client_secret(这里无用)和redirect_uri。
    • 之后随机一个MD5(code,可能不需要32位),以这个MD5作为key,client_id和uid作为value保存下来。
    • 拼接一个url,地址是redirect_uri,这个地址是admin的授权页面,参数是刚刚作为key的MD5,以及请求参数中的state,后端拼接好返回给前端。是这个链接长这个样子:
https://admin.xxxx.work/auth?code=0f2de7b4c750ad0c746929&state=78ccec1fec1c7e47bbc94855e8fb5741
  • 前端跳转到这个页面后,请求admin的/auth接口参数就是上面链接中的code和state。该接口做以下几件事:
  • 取出自己的client_id,client_secret,以及参数中的code,这三个值作为参数,请求staff的/oauth/token接口
    • 该接口根据code可以得到client_id和uid(之前保存的对应关系)。校验client_id和client_secret。
    • 校验通过后,为该uid生成个token,将token作为key,uid作为值保存。token有个默认过期时间。
    • 根据uid查询该用户的姓名、手机号、邮箱等信息。
    • 将token、过期时间、姓名、手机号、邮箱等信息返回(不返回uid)。
  • 拿到返回值,根据返回值中的邮箱,找到用户在admin系统中uid,然后将uid作为session_id添加到session池中,这样通过最初的session,即可找到对应用户。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值