zoukankan      html  css  js  c++  java
  • OAuth2与sso的结合思路

    =首次登录============================
    1、用户访问A系统,A系统检查自身的session(第三方系统概念,非统一认证中心概念),发现此人未登录,转到统一认证中心登录检查接口。
    2、统一认证中心检查接口,判断下sso domain下是否存在 access_token,没有表示需要进行首次登录验证。
    3、跳转到登录页面,要求输入用户名,密码,验证码。
    4、验证通过后,
    (1)为A系统生成一个授权码authorization_code
    (2)根据authorization_code+clientId+clientSecret ---->生成 access_token
    (3)将access_token写入sso domain 的cookie中
    (4) 将authorization_code和access_token记录到redis中。
    5、将授权码authorization_code通过ReturnUri跳转给A系统.
    6、A系统获取到授权码后,通过post方式验证授权码(authorization_code+clientId+clientSecret ),sso首先到redis中查找authorization_code是否存在,存在则直接返回redis中的access_token值,否则验证是不是合法授权码,正确后,生成access_token返给A系统。
    7、A系统确认authorization_code正确,并获取到access_token后,可以实现自己的内部逻辑,比如记录session等。
    =二次访问其它系统=====
    1、用户访问B系统,B系统根据自身的检查逻辑判断,发现此人没有登录,转到统一认证中心登录检查接口。
    2、统一认证中心检查接口,判断下sso domain下是否存在 access_token,存在,表示已经在其它系统中登录过了。
    3、
    (1)为B系统生成一个授权码authorization_code
    (2)根据authorization_code+clientId+clientSecret ---->生成 access_token
    (3) 将authorization_code和access_token记录到redis中。
    4、将授权码authorization_code通过ReturnUri跳转给B系统.
    5、B系统获取到授权码后,通过post方式验证授权码(authorization_code+clientId+clientSecret ),sso首先到redis中查找authorization_code是否存在,存在则直接返回redis中的access_token值,否则验证是不是合法授权码,正确后,生成access_token返给B系统。
    6、B系统确认authorization_code正确,并获取到access_token后,可以实现自己的内部逻辑,比如记录session等。
    刷新token====
    1、在SSO中需要重写domain下的cookie值access_token.
    2、

    注销登录=====
    1、各系统通过类似于redis的方式,对于access_token进行保存,以后的内部程序的访问,不必到统一认证中心检查access_token的有效性。
    2、提供退出接口,方便sso进行调用,统一实现退出逻辑。调用后,删除本地的redis中access_token

  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/littlehb/p/12451514.html
Copyright © 2011-2022 走看看