669
Udesk智能客服系统
单点登录设置
单点登录场景:
单点登录(Single sign-on,SSO)是一种访问控制,在多个软件应用中,用户只需登录其中一个应用,就可以成功访问其他应用;同样,用户只需注销其中一个应用,就可以成功注销其他应用。
譬如,某企业建设了OA系统和客服系统,同时做了单点登录控制。某员工登录了OA系统的时,其实也同时登录了客服系统,这样可以减少用户多次登录的麻烦。
单点登录接入步骤:
1、登录Udesk后台
用管理员身份登录Udesk后台,进入”管理中心-管理中心-单点登录“,在”远程登录URL“、”远程退出URL“中分别填写企业自己的登录和退出URL。
这个地址的作用是当用户通过Udesk域名进行登录时,页面会自动跳转至企业做了单点登录控制的远程登录URL上,即在此处配置的“远程登录URL”链接。
当用户在此登录页中输入用户名和密码后,登录后台根据sso协议调用Udesk的jwt响应地址,当Udesk服务器认证通过后,根据提交的参数判断:
- 如果在客服管理中找到客服账号,即可登录Udesk客服系统 ,
- 如果找到客户账号,即以客户的身份登录Udesk,
- 如果没有找到客户账号,则创建新的客户并以客户身份登录。
当用户退出Udesk时,会同时退出其它应用,同时界面跳转至系统配置的“远程退出URL”页面上。
2、开发者代码添加
配置好远程登录和登出的URL后,需要开发者按SSO协议添加代码 :
• jwt请求地址:即远程登陆URL,第三方站点的登陆页面。该选项由管理中心 -> 单点登陆
设置
• jwt响应地址及参数
1、地址: https://{yourdomain}.udesk.cn/users/auth/jwt/callback
2、请求方法:get
3、请求参数
参数名:jwt
参数类型:string
参数值:由jwt协议编码
• jwt协议编码值所需的相关信息。使用的对称加密协议为HS256,被加密的json数据如下:
{
name: "nickname", //用户名称
email: "xxx@qq.com", //用户邮箱
iat: 1451890858 //登录时间,时间为"格林整数"
}
对称加密的demo
Ruby Demo:
secret = sso_setting.shared_secret
claims = {}
claims[:name] = "Dude"
claims[:email] = customer_email
claims[:iat] = Time.now.to_i
payload = JWT.encode(claims, secret)
url = "https://#{host_name}/users/auth/jwt/callback?jwt=#{payload}"
PHP的jwt lib在这里https://github.com/firebase/php-jwt,使用方式类似:
php-jwt/src/JWT.php
public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)
{
$header = array('typ' => 'JWT', 'alg' => $alg);
if ($keyId !== null) {
$header['kid'] = $keyId;
}
if ( isset($head) && is_array($head) ) {
$header = array_merge($head, $header);
}
$segments = array();
$segments[] = JWT::urlsafeB64Encode(JWT::jsonEncode($header));
$segments[] = JWT::urlsafeB64Encode(JWT::jsonEncode($payload));
$signing_input = implode('.', $segments);
$signature = JWT::sign($signing_input, $key, $alg);
$segments[] = JWT::urlsafeB64Encode($signature);
return implode('.', $segments);
}
php自行实现这个encode函数即可。
最后更新:2017-01-17 10:01:40