单点登录配置

2022-08-02 17:36:54
丁永亮
3276
最后编辑:李文睿 于 2022-08-05 08:18:45
分享链接
喧喧支持第三方应用单点登录,具体步骤如下:
  1. 当前用户 admin 登录喧喧
  2. xxb/应用/添加应用 新增一个应用
  3. xxc 打开应用应当可以看到新增的应用,点击应用时实际访问的地址为 http://example.com/sso?m=sso&f=check&from=test&account=admin&authcode=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    • m=sso&f=check xxb 验证的 controller 方法
    • from 应用代码
    • account 当前账户名
    • authcode 临时认证代码,由 authKey 与 应用代号生成
      • xxc 登录后可通过user.authKeyForServer 获取一个 authKey,用于随接口发送的登录验证的密码,该 authKey 与账户名、登录token、当前时间相关,有效期大概60s
  4. 第三方应用接收到该请求时,应当转发至喧喧 xxb
  5. xxb 验证接受到的应用代码、账户名、临时认证代码的有效性,并将验证结果返回至第三方服务器,若验证成功则返回验证的用户信息
  6. 第三方应用验证拿到的用户信息,若验证成功则往应用前端写入用户的身份验证信息
  7. 第三方应用注销登录不应影响 xxc 的登录状态

第三方应用示例代码:


const express = require('express');
const md5 = require('md5');
const { format } = require('url');
const host = 'example.com';
const port = 80;
const app = express();
/** 应用代号 */
const code = 'test';
/** 应用密钥 */
const key = 'umaeitw7hzhxmotxsiode11esumq8am9';
app.get('/sso', (req, res) => {
    const { ip: userIP, query } = req;
    const { token, referer, sessionid } = query;
    const auth = md5(`${code}${userIP}${token}${key}`);
    /** 验证通过后跳转到的 url */
    const callback = encodeURIComponent(`http://${host}:${port}/hello`);
    /** 生成喧喧单点登录验证地址 */
    const url = format({
        protocol: 'http',
        hostname: 'xuanxxb.com',
        pathname: '/index.php',
        query: {
            m: 'sso',
            f: 'check',
            token,
            auth,
            userIP,
            callback,
            referer,
        },
      });
    /** 验证请求转发 */
    res.redirect(url);
});
app.get('/hello', (req, res) => {
    if (req.query.status === 'success' && req.query.md5 === md5(req.query.data)) {
         return res.end((new Buffer(req.query.data, 'base64')).toString());
    }
    res.end(req.url);
});
app.listen(port, host, () => {
    console.log('Test listening on port 80!');
});
app.on('error', (e) => {
    console.log('Error happened: ', e.message);
});



发表评论
陆 加 陆 =
评论通过审核后显示。