专用登录页设置

单点登录仅对专用登录页生效。因此使用单点登录前,需要先设置专用登录页

系统设置-基本信息

参数 必填 说明
标识 系统生成 该参数由系统生成。如未生成,请联系管理员
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地址及参数说明

参数名 是否必填 类型 参数值
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>");
}

单点登出

参数名 是否必填 类型 参数值
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));
    }