3.1 KiB
3.1 KiB
代理身份认证(Proxy SSO)
适用场景:应用 O(中心应用)登录后,用户点击进入应用 A、B、C(分支应用)时无需重新登录。
流程
用户登录中心应用 O
│
├─ O 使用 validateWithProxy.do 验证 token → 获得 grantToken
│
├─ 用户点击分支应用 A
│ ├─ O 调用 validateProxyGrantToken.do → 获得分支应用 A 的 token
│ └─ 将 token 传给分支应用 A → A 用 validate.do 验证
│
└─ 用户退出中心应用 O
└─ O 调用 expireProxy.do 注销 grantToken
API 详情
1. 中心应用验证(获取 grantToken)
GET https://iaaa.pku.edu.cn/iaaa/svc/token/validateWithProxy.do
?remoteAddr={REMOTE_ADDR}
&appId={APP_ID}
&token={TOKEN}
&msgAbs={MSG_ABS}
参数和 msgAbs 计算方式与标准 validate.do 相同。
成功返回:
{
"success": true,
"errCode": "0",
"errMsg": "认证成功",
"userInfo": {
"name": "用户姓名",
"status": "账号状态",
"identityId": "身份账号",
"deptId": "所在院系码",
"dept": "所在院系",
"identityType": "身份类别",
"detailType": "身份细类",
"identityStatus": "身份状态"
},
"grantToken": "代理票据"
}
2. 获取分支应用 Token
GET https://iaaa.pku.edu.cn/iaaa/svc/token/validateProxyGrantToken.do
?remoteAddr={REMOTE_ADDR}
&appId={APP_ID}
&targetAppId={TARGET_APP_ID}
&grantToken={GRANT_TOKEN}
×tamp={TIMESTAMP}
&msgAbs={MSG_ABS}
参数:
| 参数 | 说明 |
|---|---|
remoteAddr |
客户端 IP |
appId |
中心应用 ID |
targetAppId |
分支应用 ID |
grantToken |
上一步获得的代理票据 |
timestamp |
当前时间戳(long 型整数) |
msgAbs |
MD5 摘要,PARA_STR 为除 msgAbs 外所有参数按参数名升序拼接 |
注意:此端点参数较多,PARA_STR 排序后为:
appId={}&grantToken={}&remoteAddr={}&targetAppId={}×tamp={}
成功返回:
{
"success": true,
"errCode": "0",
"errMsg": "验证成功",
"token": "分支应用访问票据"
}
错误码 12(需要手机验证): 重定向用户到:
https://iaaa.pku.edu.cn/iaaa/ma4proxy.jsp
?proxyAppId={中心应用ID}
&appId={分支应用ID}
&userId={用户账号}
&grantToken={GRANT_TOKEN}
&redirectUrl={分支应用回调地址,需URLEncode}
3. 分支应用验证 Token
分支应用收到 token 后,使用标准 validate.do 或 validateSimple.do 验证,与普通认证流程相同。
4. 注销代理 Token
中心应用退出时或必要时调用:
GET https://iaaa.pku.edu.cn/iaaa/svc/token/expireProxy.do
?appId={APP_ID}
&grantToken={GRANT_TOKEN}
&msgAbs={MSG_ABS}
msgAbs 的 PARA_STR:appId={}&grantToken={}(按参数名升序)
返回:
{"success": true, "errCode": "0", "errMsg": "注销成功"}