- 1. 10.x版本服务端
-
2. 9.x及以下版本服务端
- 2.1 XXB首页统计信息
- 2.2 消息中转服务器端的参数设置
- 2.3 客户端的版本更新
- 2.4 添加和维护用户和权限
- 2.5 添加和维护应用
- 2.6 移动端3.0至5.6版本的Android端推送功能
- 2.7 移动端6.1及以上版本的Android端推送功能
- 2.8 喧喧APP的iOS端推送功能
- 2.9 音视频服务端参数配置
- 2.10 SRS 音视频服务端参数配置
- 2.11 Jitsi 音视频服务端参数配置
- 2.12 群管理
- 2.13 Windows 一键包连接 MySQL 数据库
- 2.14 Linux 一键包连接MySQL数据库
- 2.15 XXD 使用 HTTPS 协议证书
- 2.16 Office 文档服务器参数配置
- 2.17 单点登录配置
- 2.18 使用 RoadRunner 启动 xxb 服务
单点登录配置
- 2022-08-02 17:36:54
- 丁永亮
- 6103
- 最后编辑:张玉洁 于 2026-01-23 08:44:31
- 分享链接
喧喧支持第三方应用单点登录,具体步骤如下:
- 当前用户 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);
});
发表评论

联系我们
社群交流