- 1 XXB首页统计信息
- 2 消息中转服务器端的参数设置
- 3 客户端的版本更新
- 4 添加和维护用户和权限
- 5 添加和维护应用
- 6 喧喧APP的Android端推送功能
- 7 喧喧APP的Android端推送功能(6.1版本)
- 8 喧喧APP的iOS端推送功能
- 9 音视频服务端参数配置
- 10 SRS 音视频服务端参数配置
- 11 Jitsi 音视频服务端参数配置
- 12 群管理
- 13 Windows 一键包连接 MySQL 数据库
- 14 Linux 一键包连接MySQL数据库
- 15 XXD 使用 HTTPS 协议证书
- 16 Office 文档服务器参数配置
- 17 单点登录配置
- 18 使用 RoadRunner 启动 xxb 服务
单点登录配置
- 2022-08-02 17:36:54
- 丁永亮
- 5696
- 最后编辑:汤倩倩 于 2025-09-03 11:53:29
- 分享链接
喧喧支持第三方应用单点登录,具体步骤如下:
- 当前用户 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);
});
发表评论

联系我们
社群交流