JSONP 单点登录方案

流程图

接入示例

前端

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>xxx 系统</title>
</head>
<body>
<script>
    function users_callback(status, username, email, loginTime, aliveTime ,token, msg) {
        if (status==="1"){
            // TODO 用户已在 oss 登录成功
             // 为保证过期时间一致,须将 cookie 过期时间设置为 aliveTime
            document.cookie="token="+token;
            console.log(username, email, loginTime, aliveTime, token);
            // 请求后端接口,后端接口校验 token 有效性
        }

        // TODO 用户未在 oss 登录成功
        console.log(msg);
    }
</script>
<script type="text/javascript" src="http://xxx.com/api/oss/jsonp.js?callback=users_callback"></script>
</body>
</html>

后端

后端需调用 /api/oss/auth_token 验证 token 信息,该接口会返回用户基本信息。如系统和 oos 所用 redis 一致,那么可以不调用该接口进行验证,可直接在 redis 中进行验证【oss 系统 token 格式为 “oss:token值”,不推荐此种验证方式】。验证成功后业务系统可发放本地凭证,为了统一各系统,须将凭证过期时间设置为与 /api/oss/auth_token 接口中返回的 aliveTime 时间一致。

注意事项

  1. oss 登录成功后返回参数中会携带 redirect 参数,该参数的值为跳转 oos 登录页面所携带的 referrer 头信息

  2. /api/oss/jsonp.js 接口 callback 参数默认值为 callback, 接入系统可自定义回调函数,只需保持回调函数名称和逻辑处理函数名称一致即可

  3. /api/oss/jsonp.js 成功后,返回参数目前示例如下所示,为保证后续兼容性,回调函数参数需支持可变长参数。返回内容解释如下

    users_callback(                             // 回调函数名称
    '1',                                    // 请求认证状态 "1" 或 "0", "1" 代表成功
    '数据中心BI',                            // username
    '[email protected]',                    // email
    '2020-07-21 17:48:47',                  // loginTime
    '2020-07-21 19:48:47',                  // aliveTime
    'oss:KH1hsLxzyVR8Ujqc673w',             // token
    ''                                      // msg
    )
    
  4. JSONP 接口需要判断请求发起方域名是否在允许 oss 登录的名单内