单点登录配置
- 2022-08-02 17:36:54
- 丁永亮
- 3931
- 最后编辑:李文睿 于 2022-08-05 08:18:45
- 分享链接
喧喧支持第三方应用单点登录,具体步骤如下:
- 当前用户 admin 登录喧喧
- xxb/应用/添加应用 新增一个应用
- 填写名称,代号test,应用地址 http://example.com/sso
- 开启集成
- 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
- 第三方应用接收到该请求时,应当转发至喧喧 xxb
- xxb 验证接受到的应用代码、账户名、临时认证代码的有效性,并将验证结果返回至第三方服务器,若验证成功则返回验证的用户信息
- 第三方应用验证拿到的用户信息,若验证成功则往应用前端写入用户的身份验证信息
- 第三方应用注销登录不应影响 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); });
发表评论
联系我们
公众号
微信公众号