====== 多租户单点登录 ====== 单点登录功能允许为多租户管理平台的租户设置指向第三方系统的登录URL,坐席使用该第三方系统的账号登录后,可以直接进入客服云系统。 ===== 注意事项 ===== * 需要第三方自己存储一份第三方商户和环信客服的tenantId的对应记录,可以多个第三方商户对应1个tenantId。 * 需要第三方对自己存储的数据负责,比如,如果账号1,在第三方是商户A,对应的环信tenantId为123,但是如果传递给环信校验地址的时候tenantId不正确,则有可能造成无法登录,甚至在错误的租户创建用户的结果。 * 需要第三方系统自己保证JWT SECRET的安全性,和用户名的准确性防止冒名登录现象发生。 ===== 设置单点登录 ===== 完成第三方平台登录页面的开发后,可以进入多租户管理后台“设置 > 单点登录”页面,设置登录URL、生成登录密钥,并开启单点登录功能。 {{:cs:org4.png?nolink|单点登录}} ===== 时序图 ===== 下图为通过JWT的第三方单点登录(SSO)时序图。 {{:playground:image2017-5-19_13-22-48.png?nolink|}} ===== 第三方平台开发 ===== 开发一个登录页面,使用第三方自己的用户体系登录,比如: http://young-dawn-82093.herokuapp.com/chenxing/sso 在第三方登录成功之后,使用约定好的jwt secret对email、name、state进行签名,生成的jwt有3分钟有效期。 email 必填 邮箱地址,当做环信用户名 name 必填 为昵称用于创建用户的时候使用 state 必填 为登录状态Online、Hidden externalId 选填 如果第三方系统的邮箱不是用户名而是可以随时改变的一个资料信息,那么在这里填写真正登录使用的用户名 JWT_SECRET 必填 为多租户管理后台“设置 > 单点登录”页面的“登录密钥” String jwt = JWT.create() .withIssuedAt(new Date()) .withJWTId(UUID.randomUUID().toString()) .withClaim("email", email) .withClaim("name", "昵称") .withClaim("externalId", "如果第三方用户名不为email,这里填写用户名") .withClaim("state", "Online") .sign(Algorithm.HMAC256(JWT_SECRET)); 生成好jwt之后,需要redirect回环信的地址: http://lcx.kefu.easemob.com/v1/access/jwt?jwt={jwt}&returnTo={return_to}&type=org&tenantId=? 参数说明: * jwt: 上述根据email、name、state进行签名后生成的jwt * returnTo: 可以使用跳转到第三方平台时url地址携带的returnTo地址 * tenantId: 环信移动客服系统的租户ID 移动客服根据jwt进行验证之后,会自动进行登录,并且跳转到return_to的地址。