第三方自动登录并打开页面
第三方集成时,往往需要不显示登录页,直接打开页面。系统提供使用 token 进行身份认证,验证后打开页面的方法。
例如要打开的页面地址为 pageUrl,提供用户的 token,使用下面的 URL 即可直接打开页面
http://门户域名/login?token={userToken}&redirectUrl={pageUrl}
该方法网关负责自动登录,并且重定向。参数说明如下
- token:用户的 token
- redirectUrl:要打开页面的 URL
redirectUrl 的写法
打开桌面端页面
页面 URL 为:/服务名/pcxapp/pcx/页面名
例如:/react/pcxapp/pcx/infoPublish/infoPub
桌面端页面的 URL 的写法参考《单独打开桌面端页面》
打开显示门户的页面
redirectUrl 参数值为:/entry/pcxapp/#/entry/pcxapp/pcx/index/#/服务名/pcxapp/pcx/页面名
例如:/entry/pcxapp/#/entry/pcxapp/pcx/index/#/react/pcxapp/pcx/infoPublish/infoPub
访问 URL 为:http://门户域名/login?token={userToken}&redirectUrl=/entry/pcxapp/#/entry/pcxapp/pcx/index/#/服务名/pcxapp/pcx/页面名
例如:http://entrydevguide8-vip.trunk2.xcaas.com:8800/login?token=system@123&redirectUrl=/entry/pcxapp/#/entry/pcxapp/pcx/index/#/react/pcxapp/pcx/infoPublish/infoPub
打开隐藏门户的页面
redirectUrl 参数值为:/entry/pcxapp/#/entry/pcxapp/pcx/index/?portalType=embedded#/服务名/pcxapp/pcx/页面名
例如:/entry/pcxapp/#/entry/pcxapp/pcx/index/?portalType=embedded#/react/pcxapp/pcx/infoPublish/infoPub
访问 URL 为:http://门户域名/login?token={userToken}&redirectUrl=/entry/pcxapp/#/entry/pcxapp/pcx/index/?portalType=embedded#/服务名/pcxapp/pcx/页面名
例如:http://entrydevguide8-vip.trunk2.xcaas.com:8800/login?token=system@123&redirectUrl=/entry/pcxapp/#/entry/pcxapp/pcx/index/?portalType=embedded#/react/pcxapp/pcx/infoPublish/infoPub
打开不带门户的页面
redirectUrl 参数值为:/服务名/pcxapp/#/服务名/pcxapp/pcx/页面名
例如:/react/pcxapp/#/react/pcxapp/pcx/infoPublish/infoPub
访问 URL 为:http://门户域名/login?token={userToken}&redirectUrl=/服务名/pcxapp/#/服务名/pcxapp/pcx/页面名
例如:http://entrydevguide8-vip.trunk2.xcaas.com:8800/login?token=system@123&redirectUrl=/react/pcxapp/#/react/pcxapp/pcx/infoPublish/infoPub
打开移动端页面
页面 URL 为:/服务名/mobileapp/mobile/页面名
例如:/react/mobileapp/mobile/infoPublish/infoPub
redirectUrl 参数值为:/entry/mobileapp/#/服务名/mobileapp/mobile/页面名
例如:/entry/mobileapp/#/react/mobileapp/mobile/infoPublish/infoPub
访问 URL 为:http://门户域名/login?token={userToken}&redirectUrl=/entry/mobileapp/#/服务名/mobileapp/mobile/页面名
例如:http://entrydevguide8-vip.trunk2.xcaas.com:8800/login?token=system@123&redirectUrl=/entry/mobileapp/#/entry/mobileapp/mobile/infoPublish/infoPub
特别说明
- token 和 redirectUrl 参数的值,需要使用 encodeURIComponent 编码
获取用户 token
登录后获取
系统提供 API,用户登录后,获取当前用户的 token,API 说明如下
URL:
/uaa/userinfo?type=token
请求方法:
GET
返回值:
当前用户信息,包括 token
示例如下:
http://entrydevguide8-vip.trunk2.xcaas.com:8800/uaa/userinfo?type=token
返回结果中的 token 即为用户 token
{
"userId":null,"username":null,"name":null,"phoneNumber":null,"email":null,"previousLogonTime":null,"sub":null,"token":"system@FVDyd7Wuv8GkdY56PYvhmN8HqvROEUrjZ4oDZfo%2Bldw%3D",
"user_name":null,"user_id":null,"given_name":null,"previous_logon_time":null,"phone_number":null
}
使用用户名获取
系统提供 API,通过用户名获取用户 token,API 说明如下
URL:
/uaa/sso/token
请求方法:
post
参数:
expire:限制可用时长(单位:秒),不必填。设置为30,表示获取后30秒内可用,超过30秒就不能用于登录了;不设置表示 token 长久有效
username:用户名,例如:zhangsan
credentialToken: 系统环境变量 CREDENTIAL_TOKEN
返回值:
用户 token
Java 示例代码如下
// 获取环境变量 CREDENTIAL_TOKEN
String credentialToken = ContextUtil.getEnv("CREDENTIAL_TOKEN");
// 获取 token
String token = ServiceUtil.post(SpringWebUtil.getRequest(), "entry",
"/uaa/sso/token?username=" + username + "&credentialToken=" + credentialToken, null, String.class);
特别说明
- 第三方调用这个 API 去获取 token 时要进行安全验证或者权限控制,否则就相当于把密码泄露出去了
- token只是用了登录的,登录后生成user_session,user_session超时才会到登录页面,token失效只是不能用这个token登录
打开页面方式总结
打开方式 | 特点 | 处理 navigateBack |
---|---|---|
打开显示门户的页面 | 通过门户打开目标页,归门户管理, 会获得门户配置 configContext,例如:多语言、皮肤等 |
关闭打开的目标页,回到门户首页 |
打开隐藏门户的页面 | 通过门户打开目标页,不归门户管理, 会获得门户配置 configContext,例如:多语言、皮肤等 |
iframe 嵌入: 发送关闭页面消息到 parent window.open 新标签页: 发送关闭页面消息到 opener,同时关闭页面 超链接跳转: history back 回到上一个页面 |
打开不带门户的页面 | 直接打开目标页,注意:服务路由kong2必须走。 不会获得门户配置 configContext,适用于需要性能 并且不关心 configContext 的场景, 如果没有性能要求,推荐使用“打开隐藏门户的页面” |
纯粹的页面,只发送通知,需要被管理 iframe 嵌入: 发送关闭页面消息到 parent window.open 新标签页: 发送关闭页面消息到 opener 超链接跳转: history back 回到上一个页面 |