diff --git a/sa-token-doc/sso/message-push.md b/sa-token-doc/sso/message-push.md index 70840e6c..232b3482 100644 --- a/sa-token-doc/sso/message-push.md +++ b/sa-token-doc/sso/message-push.md @@ -6,13 +6,112 @@ 消息推送机制是应用与认证中心相互沟通的桥梁,ticket 校验、单点注销等行为都是依赖消息推送机制来实现的。 +本篇将介绍在 Sa-Token SSO 模块中,sso-server 端和 sso-client 端分别内置了哪些消息模块,以及如何自定义消息处理器。 + + +### 1、sso-server 端内置消息处理器 + +#### 1.1、checkTicket(ticket 校验) + +作用:在 SSO 模式三下为 sso-client 提供 ticket 校验能力,返回 loginId 等数据 + +``` url +http://{sso-server主机地址}/sso/pushS +``` + +接收参数: + +| 参数 | 是否必填 | 说明 | +| :-------- | :-------- | :-------- | +| ticket | 是 | ticket 码 | +| client | 否 | 客户端标识,可不填,代表是一个匿名应用 | +| ssoLogoutCall | 否 | Client 端单点注销时 - 回调 URL 参数名称 (匿名 Client 时使用) | +| timestamp | 是 | 当前时间戳,13位 | +| nonce | 是 | 随机字符串 | +| sign | 是 | 签名,生成算法示例:`md5( client={client值}&nonce={随机字符串}&ticket={ticket码}×tamp={13位时间戳}&key={secretkey秘钥} )` | + +**签名算法规则:将所有参数按照字典顺序依次排列(key除外,挂在最后面),然后进行 md5 摘要。以下不再赘述。** + +返回值示例: +``` js +{ + "code": 200, // 返回 200=成功,500=失败 + "msg": "ok", + "data": "10001", + "loginId": "10001", // 此 ticket 对应的认证中心 loginId + "tokenValue": "5db12b02-9c8e-4e36-8ed9-bf295caed80e", // 对应的认证中心会话 token + "deviceId": "MxOTCLWi5NXGqFQZBFdsH66Ni5YTJ8q0", // 对应的认证中心登录设备 id + "remainTokenTimeout": 2591999, // token 剩余有效期 + "remainSessionTimeout": 2591999 // Access-Session 会话剩余有效期 +} +``` + + +#### 1.2、signout(单点注销) + +作用:为 sso-client 提供单点注销能力 + +``` url +http://{sso-server主机地址}/sso/pushS +``` + +接收参数: + +| 参数 | 是否必填 | 说明 | +| :-------- | :-------- | :-------- | +| loginId | 是 | 账号id | +| client | 否 | 客户端标识,可不填,代表是一个匿名应用 | +| deviceId | 否 | 客户端设备 id | +| timestamp | 是 | 当前时间戳,13位 | +| nonce | 是 | 随机字符串 | +| sign | 是 | 签名,生成算法示例:`md5( client={client值}&deviceId={设备id}&nonce={随机字符串}&loginId={loginId}×tamp={13位时间戳}&key={secretkey秘钥} )` | + +返回值示例: +``` js +{ + "code": 200, // 返回 200=成功,500=失败 + "msg": "ok", + "data": null +} +``` + + +### 2、sso-client 端内置消息处理器 + +#### 2.1、logoutCall(单点注销回调) + +作用:接收来自 sso-server 的单点注销回调通知 + +``` url +http://{sso-client主机地址}/sso/pushC +``` + +接收参数: + +| 参数 | 是否必填 | 说明 | +| :-------- | :-------- | :-------- | +| loginId | 是 | 账号id | +| deviceId | 否 | 客户端设备 id | +| timestamp | 是 | 当前时间戳,13位 | +| nonce | 是 | 随机字符串 | +| sign | 是 | 签名,生成算法示例:`md5( deviceId={设备id}&nonce={随机字符串}&loginId={loginId}×tamp={13位时间戳}&key={secretkey秘钥} )` | + +返回值示例: +``` js +{ + "code": 200, // 返回 200=成功,500=失败 + "msg": "单点注销回调成功", + "data": null +} +``` + + +### 3、认证中心自定义消息处理器 + 当然你也可以通过自定义消息处理器的方式,来扩展消息推送能力,这将非常有助于你完成一些应用与认证中心的自定义数据交互。 假设我们现在有如下需求:在 sso-client 获取 sso-server 端指定账号 id 的昵称、头像等信息,即:用户资料的拉取。 - -### 1、认证中心自定义消息处理器 - 首先,我们需要在 sso-server 实现一个消息处理器: ``` java @@ -41,7 +140,7 @@ public class SsoServerController { ``` -### 2、应用端调用消息推送接口获取数据 +### 4、应用端调用消息推送接口获取数据 首先保证在配置文件里要配置上消息推送的具体地址 @@ -81,7 +180,7 @@ sa-token.sso-client.secret-key=SSO-C3-kQwIOrYvnXmSDkwEiFngrKidMcdrgKor 然后在需要拉取资料的地方: ``` java -// 查询我的账号信息:sso-client 前端 -> sso-center 后端 -> sso-server 后端 +// 查询我的账号信息:sso-client 前端 -> sso-client 后端 -> sso-server 后端 @RequestMapping("/sso/myInfo") public Object myInfo() { // 如果尚未登录