1. 配置Base URL

Base URL 在登录认证有重要的作用,配置认证前请先设置 Base URL

IDP即Identity Provider,是身份提供者,在SSO单点登录中用来提供用户权限信息断言的一方。SP是Service Provider,服务提供者,为用户提供所需服务的一方,通过IDP来实现用户身份验证。 使用认证服务前请确保IDP与SP之间能够相互通信。

2. 认证方式

打开设置->认证方式,设置用户登录系统各种认证方式。

2.1. HENGSHI

HENGSHI内置的用户认证系统。即使设置为其他认证方式,HENGSHI系统管理员仍可以通过访问/#/login页面来登录。

2.2. LDAP

切换为LDAP认证方式,需要先进行如下设置:

2.3. CAS

切换为CAS认证方式,需要先进行如下设置:

2.4. SAML2

切换为SAML2认证方式,需要先进行如下设置:

2.5. OAuth2

切换为OAuth2认证方式,需要先进行如下设置:

  1. Client Id,是指 Oauth Server 注册的客户端 Id,也有些系统会叫 App Id,不同的 Oauth Server 叫法会有不同。
  2. Client Secret,是指 Oauth Server 注册的客户端 Secret,也有些系统会叫 App Secret。
  3. Authorize 接口,当 HENGSHI 系统发现用户没有登录,会跳转到该地址,输入用户名密码在 Oauth Server 登录。登录成功后Oauth Server 会重定向到 HENGSHI 传递的 redirect_uri,并加上 code 参数。
  4. Token 接口,HENGSHI系统通过 code 参数向该接口请求Token,
  5. User-info 接口,HENGSHI系统通过 Token 向该接口请求用户基本信息。
  6. Logout 接口,HENGSHI系统退出登录时,重定向到该接口,在 Oauth Server 退出登录。有些 Oauth Server 并没有实现该接口。
  7. 登出后跳转地址参数名,默认为 redirect_uri,HENGSHI 系统向 Oauth Server 发出退出登录Oauth Server请求时传递, Oauth Server 退出登录后重定向到该地址。
  8. Scope,由 Oauth Server 定义,配置在 HENGSHI 系统中,HENGSHI 系统在请求 code 参数时传递。
  9. 原始 url 传递方式,是指记录用户原始的请求地址的方式,比如用户输入的 Url 为 http://{host}:{port}/#/apps/1/dashboard/1, 在用户登录成功以后会跳转到该地址。一般是记录到 session 中,在多个 iframe 嵌入页面同时打开的场景,需要配置在 url 中传递。
  10. Reload User,是否每次刷新页面都需要重新从 Oauth Server 获取当前登录用户。具体使用场景见认证方式集成说明
  11. 登录名映射,用户名映射,邮箱映射,手机号映射,角色映射,组映射参考 通用配置说明
  12. 租户编码映射,客户系统中的某字段将做为 HENGSHI 系统中租户编码,该租户如不存在会新建租户。
  13. 租户名称映射,客户系统中的某字段将做为 HENGSHI 系统中租户名称,只有配置了租户编码映射,该配置才会生效。
  14. 平台方 Id,如果 User-info 接口返回的信息中租户编码与平台方 Id相同,则认为该用户属于平台方。

2.6. 钉钉

钉钉认证方式支持两种,扫码登录和微应用免登

  1. 配置 AppKey,AppSecret,这是微应用免登所必须的信息。AppKey,AppSecret获取请参考 钉钉配置微应用
  2. 配置 appId,appSecret,如果需要扫码登录,则需要配置该信息。appId,appSecret获取请参考 钉钉扫码配置
  3. 配置 CorpId,SSOsecret,如果需要管理员可以在钉钉应用管理后台免登,则需要配置该信息。CorpId,SSOsecret 获取请参考 查看CorpId,SSOsecret
  4. 登录方式,是配置默认的登录方式,即在 url 中没有指定时起作用的方式。authCode 是微应用免登,扫码是通过扫描二维码登录。
  5. 同步频率,是对组织架构同步进行配置,单位为分钟,0为不同步。如果需要组织架构同步,则必须要配置AppKey,AppSecret,并且应用要开通权限管理中的通讯录权限。

    2.6.1. 钉钉配置微应用

  6. 进入钉钉开发者后台 -> 应用开发 -> H5微应用,点击创建应用。
  7. 获取 AppKey,AppSecret,配置到 HENGSHI 系统钉钉配置页面的同名字段中。
  8. 配置开发管理
    1. 开发模式选择开发应用。
    2. 填写服务器出口 ip (可以通过https://www.ip138.com/查询,或者联系网络管理员获得)。
    3. 应用首页访问地址,这是移动端点击 HENGSHI 应用的跳转地址,根据需要配置 HENGHSI 的页面地址,要增加认证相关的参数, http://{host}:{port}/?activeAuth=dingtalk&dtLoginType=authCode&corpId={corpId}#/apps/1/dashboard/1。 如果是租户使用,需要增加 tenantCode,或者 tenantId 参数。 http://{host}:{port}/?activeAuth=dingtalk&dtLoginType=authCode&corpId={corpId}&tenantCode={tenantCode}#/apps/1/dashboard/1。 在钉钉开放平台首页查看 CorpId https://open-dev.dingtalk.com/#/index
    4. PC端首页地址,是钉钉桌面端点击 HENGSHI 应用的跳转地址,配置同上。
    5. 管理后台地址,是钉钉管理员从管理后台中免登进入 HENGHSI 应用的地址。需要在 HENGSHI 中配置 CorpId,SSOSecret。 在钉钉开放平台查看 SSOSecret https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.3a256573NRPEfc#/corpAuthInfo
  9. 配置权限管理,需要开通通讯录只读权限,登录身份验证权限,通讯录邮箱等个人信息权限,通讯录手机号码信息权限。其中手机号码信息权限 时可选的。
  10. 版本管理与发布,可根据需要设置应用发布的使用范围,只有在范围中的人员才可以看到该应用。

    2.6.2. 钉钉扫码配置

  11. 进入钉钉开发者后台 -> 应用开发 -> 移动接入应用 -> 登录,点击创建应用。

  12. 配置登录应用授权的名称,描述,授权LOGO地址,回调域名。其中授权LOGO是登录时显示的图片, 回调域名要填写 HENGSHI 的根路径,比如https://preview.hengshi.com/
  13. 获取 appId,appSecret,配置到 HENGSHI 系统钉钉配置页面的同名字段中。

钉钉认证方式相关文档,可以参考:

2.7. 企业微信

企业微信认证方式支持两种,扫码登录和微应用免登

  1. 配置企业ID,AgentId,Secret。查看企业ID,AgentId,Secret
  2. 登录方式,是配置默认的登录方式,即在 url 中没有指定时起作用的方式。 oauth 是应用免登,扫码是通过扫描二维码登录。

2.7.1. 企业微信配置自建应用

  1. 进入企业微信应用管理 -> 应用 -> 自建,点击创建应用。
  2. 配置应用logo,应用名称,应用介绍,可见范围。
  3. 配置应用
    1. 将 AgentId , Secret 配置到 HENGSHI 系统企业微信配置页面的同名字段中。
    2. 配置应用主页,如http://local.hengshi.org:8080?activeAuth=wechat-work&wcwLoginType=oauth2&tenantCode={tenantCode}。 其中activeAuth,wcwLoginType为固定值,可以实现在企业微信中点击 HENGSHI 应用免登陆。如果是租户使用,需要增加 tenantCode,或者 tenantId 参数。
    3. 配置网页授权及JS-SDK中的可信域名。
    4. 如果需要网页扫码登录功能,需要配置企业微信授权登录中的授权回调域。

企业微信认证方式相关文档,可以参考:

2.8. CTR

CTR是为客户定制的一种认证方式,该认证方式与客户自研的SSO系统对接。

2.9. 云之家

客户用的是金蝶云之家应用,客户在云之家做报销审批和报表分析的工作。所以,我们报表的入口就是在云之家创建一个应用入口,根据云之家不同的用户访问对应的报表内容。

我们需要根据云之家提供的集成API,做一个SSO认证,在云之家应用中直接配置报表的URL地址,在云之家应用中免登录打开报表就可以了。

配置方法:

  1. 在云之家 (www.yunzhijia.com) 申请试用成为系统管理员,或由他人邀请,并设为系统管理员

  2. 成为系统管理员后,通过管理中心->应用中心->轻应用管理,进入轻应用管理页面

  3. 选择新建应用,在打开的页面填入信息,3处URL为衡石系统的url末尾加上activeAuth=yunzhijia。如果是租户使用需要 填写 tenantCode 或者 tenantId 参数,示例http://192.168.3.226:8080/?activeAuth=yunzhijia&tenantCode=tenant1#/publish

  1. 保存后,会生成APPId和APPSecret。

  1. 在衡石系统中,设置->认证方式->YUN ZHI JIA中配置 APP ID , APPSecret。

2.10. JWT 请求参数

JWT 请求参数是指用户访问 HENGSHI 系统时,按照 jwt 规范,将用户基本信息进行签名/加密,通过 url 传递给 HENGSHI 系统,兼顾安全性和便利性。

  1. 验签算法,客户端签名时与 HENGSHI 配置保持一致。
  2. 验签密钥,验签算法为HS256时,客户端与 HENGSHI 配置保持一致。验签算法为RS256时,客户端使用私钥签名,HENGSHI 配置中填写公钥。
  3. 解密方法,客户端加密时与 HENGSHI 配置保持一致。
  4. 解密算法,客户端加密时与 HENGSHI 配置保持一致。
  5. 解密密钥,客户端使用公钥加密,HENGSHI 配置中填写私钥。
  6. 访问 HENGSHI 系统是 url 为 http://{host}:{port}/?activeAuth=jwt-param&jwtParam={签名/加密后的 jwt 字符串}
  7. 登录名映射,用户名映射,邮箱映射,手机号映射,角色映射,组映射参考 通用配置说明
  8. 相关参考资料
  9. 客户端签名/加密示例

2.10.1. JWT 基本格式说明

JWT标准中的部分声明:

声明 含义 是否必须 处理逻辑及限制
iss jwt签发者
sub jwt subject 非空唯一,如果没有loginName/email的映射配置,则HENGSHI将该值做为用户的唯一标示。如果有loginName/email的映射配置则忽略该值。建议用户使用loginName/email的映射配置,sub的值与loginName/email的值相同
exp jwt的过期时间 过期则该jwt无效

自定义声明:

声明 含义 处理逻辑及限制
有映射配置自定义的声明 在HENGSHI系统中配置了映射关系 HENGSHI会根据映射关系保存到用户相应的字段上,如下例中的loginName=alice,在HENGSHI登录名映射配置为loginName,则会将alice做为HENGSHI中用户的loginName。其他的参考 通用配置说明
无映射配置自定义的声明 没有在HENGSHI系统中配置映射关系 HENGSHI会将该类信息保存到用户属性中 ,如下例中的abc=123,在HENGSHI没有映射配置,则会保存为用户的属性信息中

JWT是由三段信息构成的,将这三段信息文本用"."链接一起就构成了JWT字符串。以下为示例

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZS1zdWJqZWN0IiwiYWJjIjoiMTIzIiwicm9sZXMiOlsic3lzdGVtIGFkbWluIiwiZGF0YSBhZG1pbiIsImRhdGEgYW5hbHlzdCIsImRhdGEgdmlld2VyIiwiYXBpIGFkbWluIl0sImxvZ2luTmFtZSI6ImFsaWNlIn0.PGA9DNa-B_4e4WS-fVG57tvxYe0dlu0r8O_Lw1vEtAQ
  1. 第一部分是header,明文是{"typ":"JWT","alg":"HS256"},经过base64URL编码之后是eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
  2. 第二部分是payload,明文是{"sub":"alice-subject","abc":"123","roles":["system admin","data admin","data analyst","data viewer","api admin"],"loginName":"alice"}(其中loginName,roles,abc都是自定义的示例信息,可以根据需要增加修改),经过base64URL编码之后是eyJzdWIiOiJhbGljZS1zdWJqZWN0IiwiYWJjIjoiMTIzIiwicm9sZXMiOlsic3lzdGVtIGFkbWluIiwiZGF0YSBhZG1pbiIsImRhdGEgYW5hbHlzdCIsImRhdGEgdmlld2VyIiwiYXBpIGFkbWluIl0sImxvZ2luTmFtZSI6ImFsaWNlIn0
  3. 第三部分是signature,由第一部分的header+"."+第二部分的payload得到需要签名的信息是eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZS1zdWJqZWN0IiwiYWJjIjoiMTIzIiwicm9sZXMiOlsic3lzdGVtIGFkbWluIiwiZGF0YSBhZG1pbiIsImRhdGEgYW5hbHlzdCIsImRhdGEgdmlld2VyIiwiYXBpIGFkbWluIl0sImxvZ2luTmFtZSI6ImFsaWNlIn0,经过相应签名算法签名以后(在本例中就是HS256),再通过base64URL编码得到签名是PGA9DNa-B_4e4WS-fVG57tvxYe0dlu0r8O_Lw1vEtAQ 以上为jwt生成过程的基本说明,具体细节以及实现库可以通过JWT官网进一步了解。

java 示例依赖库:

    <dependency>
        <groupId>com.nimbusds</groupId>
        <artifactId>nimbus-jose-jwt</artifactId>
        <version>5.4</version>
   </dependency>

java 示例代码:


import com.nimbusds.jose.EncryptionMethod;
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWEAlgorithm;
import com.nimbusds.jose.JWEHeader;
import com.nimbusds.jose.JWEObject;
import com.nimbusds.jose.JWSAlgorithm;
import com.nimbusds.jose.JWSHeader;
import com.nimbusds.jose.JWSSigner;
import com.nimbusds.jose.Payload;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.crypto.RSAEncrypter;
import com.nimbusds.jose.crypto.RSASSASigner;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception {
        //HS256  hmac 签名
        hmacSign();
        System.out.println("------------------------------------------");
        //RS256  rsa 签名
        rsaSign();
        System.out.println("------------------------------------------");
        //A128CBC-HS256  RSA-OAEP-256  加密
        signAndEncrypt();
    }

    //RS256
    public static void rsaSign() throws NoSuchAlgorithmException, JOSEException {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
        KeyPair kp = kpg.genKeyPair();
        RSAPrivateKey privateKey = (RSAPrivateKey) kp.getPrivate();
        RSAPublicKey publicKey = (RSAPublicKey) kp.getPublic();
        JWTClaimsSet claimsSet = getJwtClaimsSet();

        JWSSigner signer = new RSASSASigner(privateKey);
        SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT).build(), claimsSet);
        signedJWT.sign(signer);
        String token = signedJWT.serialize();
        String url = "http://{host}:{port}?activeAuth=jwt-param&jwtParam=" + token;
        System.out.println(url);
        //验签密钥 在 hengshi 系统中配置
        System.out.println("验签密钥=" + Base64.getEncoder().encodeToString(publicKey.getEncoded()));

    }

    //HS256
    public static void hmacSign() throws Exception {
        JWTClaimsSet claimsSet = getJwtClaimsSet();
        String key = "4b117a14-c652-410a-83b2-9839c16e7ae1";//hs256 密钥 ,必须大于32位
        SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.HS256).type(JOSEObjectType.JWT).build(), claimsSet);
        JWSSigner signer = new MACSigner(key);
        signedJWT.sign(signer);

        String token = signedJWT.serialize();
        String url = "http://{host}:{port}?activeAuth=jwt-param&jwtParam=" + token;
        System.out.println(url);
        //验签密钥 配置到 hengshi 系统中
        System.out.println("验签密钥=" + key);
        /*
        备注:签名内容不同,token也不相同,下面的token是根据上面代码中的内容生成的,如果有修改,则token也会发生变化
        生成的token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZS1zdWJqZWN0IiwiYWJjIjoiMTIzIiwicm9sZXMiOlsic3lzdGVtIGFkbWluIiwiZGF0YSBhZG1pbiIsImRhdGEgYW5hbHlzdCIsImRhdGEgdmlld2VyIiwiYXBpIGFkbWluIl0sImxvZ2luTmFtZSI6ImFsaWNlIn0.PGA9DNa-B_4e4WS-fVG57tvxYe0dlu0r8O_Lw1vEtAQ
        示例请求url:http://{host}:{port}?activeAuth=jwt-param&jwtParam=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZS1zdWJqZWN0IiwiYWJjIjoiMTIzIiwicm9sZXMiOlsic3lzdGVtIGFkbWluIiwiZGF0YSBhZG1pbiIsImRhdGEgYW5hbHlzdCIsImRhdGEgdmlld2VyIiwiYXBpIGFkbWluIl0sImxvZ2luTmFtZSI6ImFsaWNlIn0.PGA9DNa-B_4e4WS-fVG57tvxYe0dlu0r8O_Lw1vEtAQ
         */
    }

    private static JWTClaimsSet getJwtClaimsSet() {
        List<String> roles = new ArrayList<>();
        roles.add("system admin");//系统管理员
        roles.add("data admin");//数据管理员
        roles.add("data analyst");//数据分析员
        roles.add("data viewer");//数据查看者
        roles.add("api admin");//API 管理员

        String loginName = "alice";//登录名,唯一


        JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
                .subject(loginName + "-subject") //jwt 主题,jwt要求不能为空,如果没有配置登录名映射,会默认取该值作为登录名。要求唯一,可以与登录名相同
                //.issuer("https://c2id.com") //颁发者身份标识,表示 Token 颁发者的唯一标识,一般是一个 http(s) url,hengshi中没有使用
                .claim("roles", roles)
                /*登录名,唯一,key可以设置为任意的名称,需要在hengshi 【jwt参数认证】方式中配置登录名映射,如此处应配置登录名映射为loginName
                 * hengshi中还可以配置邮箱,手机,角色,用户组等映射,详情请参考文档*/
                .claim("loginName", loginName)
                .claim("abc", "123")       //可以根据需要增加claim,都会作为用户属性保存
                //.expirationTime(new Date(new Date().getTime() + 60 * 1000)) //有效期,根据需要设置
                .build();
        return claimsSet;
    }

    public static void signAndEncrypt() throws Exception {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

        KeyPair signkp = kpg.genKeyPair();
        RSAPrivateKey signPrivateKey = (RSAPrivateKey) signkp.getPrivate();
        RSAPublicKey signPublicKey = (RSAPublicKey) signkp.getPublic();
        //验签密钥 配置到 hengshi 系统中
        System.out.println("验签密钥=" + Base64.getEncoder().encodeToString(signPublicKey.getEncoded()));
        JWTClaimsSet jwtClaimsSet = getJwtClaimsSet();
        SignedJWT signedJWT = new SignedJWT(
                new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT).build(),
                jwtClaimsSet);

        signedJWT.sign(new RSASSASigner(signPrivateKey));
        KeyPair encryptKP = kpg.genKeyPair();
        RSAPrivateKey encryptPrivateKey = (RSAPrivateKey) encryptKP.getPrivate();
        //解密密钥 配置到 hengshi 系统中
        System.out.println("解密密钥=" + Base64.getEncoder().encodeToString(encryptPrivateKey.getEncoded()));

        RSAPublicKey encryptPublicKey = (RSAPublicKey) encryptKP.getPublic();
        JWEObject jweObject = new JWEObject(
                new JWEHeader.Builder(JWEAlgorithm.RSA_OAEP_256, EncryptionMethod.A128CBC_HS256).type(JOSEObjectType.JWT)
                        .contentType("JWT")
                        .build(),
                new Payload(signedJWT));

        jweObject.encrypt(new RSAEncrypter(encryptPublicKey));
        String token = jweObject.serialize();
        String url = "http://{host}:{port}?activeAuth=jwt-param&jwtParam=" + token;
        System.out.println(url);
    }
}

2.11. 飞书

飞书认证方式支持三种,扫码登录和微应用免登,管理后台免登录

  1. 配置App ID,App Secret。App ID,App Secret
  2. 登录名映射默认取union_id。

2.11.1. 飞书配置自建应用

  1. 进入开发者后台 -> 企业自建应用 -> 点击企业自建应用。
  2. 填写应用名称,应用描述。
  3. 在企业自建应用列表中,点击进入刚刚创建的应用,应用信息完善,编辑综合信息。
    上传应用图标。
    可根据需要填写管理后台主页http://{host}:{port}?activeAuth=lark&larkLoginType=larkAdminBackend,该地址是从飞书管理后台免登录进入系统时使用的。具体地址可以根据需要修改,activeAuth,larkLoginType两个参数是固定的。
    如过没有该需求可以不填写。

  4. 配置应用功能,网页,填写桌面端主页和移动端主页,具体地址可以根据需要修改,activeAuth,larkLoginType两个参数是固定的。
    桌面端主页http://{host}:{port}?activeAuth=lark&larkLoginType=desktop

    移动端主页http://{host}:{port}?activeAuth=lark&larkLoginType=app

  5. 安全设置,配置重定向URL。 http://{host}:{port}/lark/callback

  6. 权限管理,开通权限:以应用身份读取通讯录(contact:contact:readonly_as_app);获取用户邮箱信息(contact:user.email:readonly);获取用户 user ID(contact:user.employee_id:readonly);获取用户手机号(contact:user.phone:readonly)。 其中获取用户邮箱信息,获取用户 user ID,获取用户手机号为可选权限,如不开通,则飞书不返回以上信息。
  7. 版本管理与发布,创建版本,根据需要及飞书要求填写应用版本号,更新说明,选择可用范围。申请线上发布。
  8. 应用审核。
    1. 人工审核:进入飞书管理后台 https://bc0nlvsmah.feishu.cn/admin/appCenter/audit, 选择需要审核的应用进行审核。
    2. 自动审核:进入飞书管理后台,应用管理, https://bc0nlvsmah.feishu.cn/admin/appCenter/manage 选择需要设置自动审核的应用,点击配置,打开免审功能。
  9. 在系统中配置飞书自建应用的App ID和App Secret.

飞书认证方式相关文档,可以参考:

  • 应用免登
  • 查看App ID,App Secret
    进入飞书开放平台,选择具体应用,查看App ID和App Secret。
  • 飞书管理后台 https://bc0nlvsmah.feishu.cn/admin/appCenter/manage 免登进入具体的应用 如果在凭证与基础信息的综合信息中,填写了管理后台主页地址,则可以在飞书管理后台免登进入应用。

    飞书文档可能会有变动,以飞书官方文档为准。

3. 通用配置说明

部分认证方式(如:oauth2,jwt-param 等)支持 登录名,邮箱,手机等的映射配置,在有这些配置项的认证方式下,这些配置具有同样的含义

  1. 登录名映射,客户系统中的某字段将做为 HENGSHI 系统中用户的登录名,要求全系统唯一,目的是每次登录可以自动关联到该用户。
  2. 用户名映射,客户系统中的某字段将做为 HENGSHI 系统中用户的显示名。
  3. 邮箱映射,客户系统中的某字段将做为 HENGSHI 系统中用户的邮箱,要求全系统唯一,目的是每次登录可以自动关联到该用户。
  4. 手机号映射,客户系统中的某字段将做为 HENGSHI 系统中用户的手机号,要求全系统唯一。
  5. 角色映射,客户系统中的某字段将做为 HENGSHI 系统中该用户所拥有的角色,可以传递角色 ID 或者角色标识,如不传递,则默认是数据查看者。

    | 角色标识 | 角色名称 |
    | ------ | ------ |
    | system admin | 系统管理员 |
    | data admin | 数据管理员 |
    | data analyst | 数据分析员 |
    | data viewer | 数据查看员 |
    | api admin |  api 管理员 |
    
  6. 用户组映射,客户系统中的某字段将做为 HENGSHI 系统中该用户所属的组,可以传递用户组 ID 或者用户组名。
    以 JSON 示例,如果客户系统中传递的 json 如下:

    {
     "uniqueName":"zhangsan", //唯一标识
     "nickname":"张san",
     "name":"张三",
     "given_name":"张三",
     "family_name":"张",
     "roles":[
         "data admin", //角色标识
         "data analyst"
     ],
     "groups":[
         "group1",  //用户组名称
         "group2"
     ],
     "email":"zhangsan@hengshi.com"
    }
    

    在 HENGSHI 中的登录名映射应配置为uniqueName
    在 HENGSHI 中的用户名映射应配置为name
    在 HENGSHI 中的邮箱映射应配置为email
    在 HENGSHI 中的角色映射应配置为roles
    在 HENGSHI 中的用户组映射应配置为groups

4. 认证方式集成说明

  1. HENGSHI 系统支持多重认证方式,再不同的场景下,可以选择不同的认证方式。
  2. 无论选择那种认证方式,都可以通过 HENGSHI 用户名密码登录,登录地址为:http://{host}:{port}/#/login
  3. HENGSHI 认证方式的选择支持配置页面选择和 url 传参两种方式,在配置页面选择意味着是默认的认证方式,url 中没有 指定的时候,就会采用该认证方式进行认证,如果在 url 中指定了具体的认证方式,则优先使用 url 中的认证方式。比如: 认证方式配置选择的是 HENGSHI,但是在 url 中指定了 activeAuth=oauth2,则会使用 oauth2 进行认证。 示例:
    http://{host}:{port}/?activeAuth=oauth2#/
    
  4. 租户 url 传参指定认证方式需要传递 tenantCode={tenantCode},或者tenantId={tenantId} 示例:
    http://{host}:{port}/?activeAuth=oauth2&tenantCode={tenantCode}#/
    

4.1. 浏览器中直接使用 HENGSHI 系统场景

用户在浏览器中使用 HENGSHI 系统,并且只有只有一种认证方式的场景下,只需配置相应的认证方式,并选择该认证方式即可。

4.2. iframe 嵌入 HENGSHI 页面的场景

用户可能会直接在浏览器使用 HENGSHI 系统做图,然后使用 iframe 将 HENGSHI 看图页面嵌入到客户的系统中,通过 sso 实现免登 在该场景下,以 oauth 为例说明:

  1. 用户通过浏览器使用 HENGSHI 系统做图和 iframe 嵌入的看图都是通过用户的 oauth server 实现免登,那么只需要配置 oauth 认证方式, reloadUser 设置为 false,iframe的嵌入地址为 http://{host}:{port}/?reloadUser=true#/,reloadUser=true的作用是用户在 在客户主站登出以后,切换用户后进入 HENGSHI 页面时,HENGSHI 会重新从 oauth server 获取当前登录的用户。在浏览器中使用 HENGSHI 系统做图, 并不会有主站登出的情况,所以并不需要每次都去 oauth server 获取当前登录的用户。

  2. 用户通过浏览器使用 HENGSHI 系统做图使用 HENGSHI 的用户名密码登录,iframe使用 oauth server 实现免登。

    2.1 认证方式选择 HENGSHI 认证,用户通过浏览器使用 HENGSHI 系统做图时使用该方式登录

    2.2 需要配置 oauth 认证方式,reloadUser 设置为 false,iframe的嵌入地址为 http://{host}:{port}/?activeAuth=oauth2&reloadUser=true#/,

      用户看图时实现免登。
    

4.3. 移动端微应用嵌入 HENGSHI 页面的场景

移动端主要支持了 钉钉,企业微信,云之家 移动端微应用嵌入 HENGSHI 页面的使用方式和iframe 嵌入 HENGSHI 页面的场景大体一致。 区别只是会在移动端微应用管理页面配置多个 HENGSHI 页面地址。以企业微信为例

  1. 选择 HENGSHI 认证,用户使用 HENGSHI 的用户名密码在网页登录,做图。
  2. 在企业微信自建应用管理页面配置 HENGSHI 的嵌入地址http://{host}:{port}/?activeAuth=wechat-work&wcwLoginType=oauth2#/, 在移动端或桌面端即可免登访问 HENGSHI。

results matching ""

    No results matching ""

    安全策略 软件授权