专用登录页设置
单点登录仅对专用登录页生效。因此使用单点登录前,需要先设置专用登录页
参数 | 必填 | 说明 |
---|---|---|
标识 | 系统生成 | 该参数由系统生成。如未生成,请联系管理员 |
PC端专用登录页 | 系统生成 | 该参数由系统生成。“标识”字段生成后,自动生成该字段。使用该链接可跳转到PC端专用登录页 |
H5端专用登录页 | 系统生成 | 该参数由系统生成。“标识”字段生成后,自动生成该字段。使用该链接可跳转到H5端专用登录页 |
名称 | 可选 | 显示在专用登录页的系统名称 |
LOGO | 可选 | 系统LOGO |
浏览器标签图标 | 可选 | 系统浏览器标签图标 |
密钥 | 系统生成 | API接口等,使用该密钥加密 |
PC登录页推广内容 | 可选 | 开启后,在专用登录页左侧将显示该内容 |
PC端水印 | 可选 | 开启后,登录后PC端显示水印。 |
APP水印 | 可选 | 开启后,登录后PC端显示水印。 |
显示效果如下
单点登录设置
单点登录场景说明
单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用;同样,用户只需注销其中一个应用,就可以成功注销其他应用。
譬如,某企业建设了OA系统和ServiceGo,同时做了单点登录控制。某员工登录OA系统后,可以使用已经登录过的OA系统账号登录ServiceGo,这样可以减少用户多次登录的麻烦。
单点登录接入步骤
1、登录ServiceGo后台
用管理员身份登录ServiceGo后台,进入”设置-系统管理-系统设置-登录设置“,根据需求开启“PC端单点登录”或“H5端单点登录”, “PC端单点登录”或“H5端单点登录”中字段含义如下
参数 | 必填 | 说明 | 示例 |
---|---|---|---|
是否启用 | 是 | 打开后,方可使用 | |
标准登录名称 | 是 | 输入后,在专用登录页展示标准登录为该名称 | ServiceGo |
单点登录名称 | 是 | 输入后,在专用登录页展示单点登录为该名称 | SSO |
远程登录URL | 否 | 使用SSO时,要使用的认证中心地址。该地址的作用是当用户通过ServiceGo专有登录页或者直接输入专用登录页链接进行登录时,页面会自动跳转至企业做了单点登录控制的远程登录URL上,即在此处配置的“远程登录URL”链接。 | |
远程退出URL | 否 | 开启SSO后,当用户注销ServiceGo后,界面跳转至系统配置的“远程退出URL”页面上。 | |
accessKeyId | 是 | 系统自动生成。在SSO接口中将使用该字段 | |
秘钥 | 是 | 系统自动生成。在SSO接口中,使用该密钥加密JWT信息。“重置”将改变该字段的值,需谨慎操作 |
2、开发者代码添加
配置好远程登录和登出的URL后,需要开发者按jwt协议进行开发。jwt为ServiceGo标准单点登录协议,其他协议如Saml、Oauth、LDAP、LDFS等协议支持通过OneInto产品来实现,可联系商务接洽。
jwt地址及参数说明
- 请求方法:GET
- 地址(注意域名按照实际域名填写):
- PC端:http://servicego.udesk.cn/backend/auth/users/{accessKeyId}
- H5端/移动端:http://servicego.udesk.cn/backend/auth/users/h5/{accessKeyId}
- 请求参数说明如下
参数名 | 是否必填 | 类型 | 参数值 |
---|---|---|---|
accessKeyId | 是 | 路径 | 该参数值为系统中设置的accessKeyId的值 |
jwt | 是 | 请求参数 | 由jwt协议编码 |
redirectUrl | 否 | 请求参数 | 1.此参数控制单点登录成功后跳转的页面链接-为空默认跳转到首页2.移动端单点登录时为必填项,固定为:https://servicego.udesk.cn/site/static/sso-mobile.html |
isMobile | 否 | 请求参数 | 是否移动端单点登录(移动端单点登录时必填 1 - 是 ,0 - 否) |
jwt内容说明
项目 | 值 | 说明 |
---|---|---|
header | {"alg":"HS256","typ":"JWT"} | 固定为这两个字段和字段值 |
payload | {"aud":"U_SERVICE","sub":"1@test.cn"} | aud值固定为U_SERVICE,sub为邮箱或者工号 |
示例代码
Java示例代码如下:
依赖库
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
public void jumping(HttpServletResponse response) throws IOException {
Map<String, Object> header = new HashMap<>();
header.put("alg", "HS256");
header.put("typ", "JWT");
JWTCreator.Builder builder = JWT.create().withHeader(header);
builder.withIssuedAt(new Date());
builder.withClaim("aud", "U_SERVICE");
builder.withClaim("sub", "1@test.cn");
// TODO:此处${secret}需要替换为登录设置中的“秘钥”字段
String token = builder.sign(Algorithm.HMAC256("${secret}"));
// todo:此处 ${appKeyId} 需要替换为登录设置中的“appKeyId”字段
StringBuilder url = new StringBuilder("https://servicego.udesk.cn/backend/auth/users/${appKeyId}?aud=U_SERVICE&jwt=" + token);
response.setHeader("content-type", "text/html;charset=UTF-8");
response.getWriter().print("<html><script type='text/javascript'>location.href='" + url.toString() + "';</script></html>");
}
单点登出
- 请求方法:POST
- 地址:/backend/auth/users/logout/{accessKeyId}?jwt={jwt}
- 请求参数说明如下
参数名 | 是否必填 | 类型 | 参数值 |
---|---|---|---|
accessKeyId | 是 | 路径 | 该参数值为系统中设置的accessKeyId的值,获取方式详见单点登录 |
jwt | 是 | 请求参数 | 由jwt协议编码,见示例代码 |
-
响应参数:无
-
请求示例
$ curl -XPOST 'https://servicego.udesk.cn/backend/auth/users/logout/test10?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJVX1NFUlZJQ0UiLCJzdWIiOiIwMTAxIiwiaWF0IjoxNjQwNTg0NDc2fQ.CO89m7k6QNOAf864kBw1Z4gKfZYlp6zamw-PjqzX4D8' -i -H 'Content-Type: application/json' -H 'Accept: application/json'
- 响应示例
{
"code":200,
"message":"OK",
"visible":false
}
- 示例代码
/**
* 生成登出参数jwt
*
* @param emailOrjobNumber serviceGo账号:email或者工号
* @param accessSecret 密钥,获取方式见:单点登录密钥
* @return jwt
*/
private String genJwt(String emailOrjobNumber, String accessSecret) {
Map<String, Object> header = new HashMap<>();
header.put("alg", "HS256");
header.put("type", "JWT");
JWTCreator.Builder builder = JWT.create().withHeader(header);
builder.withIssuedAt(new Date());
builder.withClaim("aud", "U_SERVICE");
builder.withClaim("sub", emailOrjobNumber);
return builder.sign(Algorithm.HMAC256(accessSecret));
}