云客服登录开发指南
前期准备
网站应用须在云客服后台创建客户端应用,方可利用云客服授权联合登录系统,整个流程基于标准的OAUTH2.0协议。
设置 > OAUTH客户端
授权步骤
1. 第三方发起云客服授权登录请求,用户允许授权第三方应用后,云客服重定向到第三方网站,URL附上临时授权码code参数;
2. 第三方通过code加上client_id等参数,请求access_token;
3. 第三方通过access_token,获取用户基本数据资源或帮助用户实现基本操作。
access_token 获取时序图:
第一步:获取 code 临时授权码
临时授权码有效期为 10 分钟,可凭借此授权码向云客服请求 access_token。
https://{yourdomain}.kf5.com/authorize/start?response_type=code&client_id={client_id}&state={state}&redirect_uri=https%3A%2F%2Fclient.abc.com%2Fcb
假设回调 redirect_uri 为:
https://client.abc.com/cb
请求参数
参数 | 是否必须 | 说明 |
---|---|---|
response_type | 是 | 填写 code |
client_id | 是 | client 注册时分配的『客户端唯一标识』 |
scope | 否 | client 授权域,拥有多个授权域用『逗号』(,)分隔,目前仅支持 user:read |
redirect_uri | 否 | 默认使用 client 注册时使用的『跳转地址』,必须 urlencode 处理 |
state | 否 | 用于 client 对保持上下文 |
正确响应
成功将返回临时授权码,从回调接口中通过 code 参数获得。
https://client.abc.com/cb?state={state}&code={code}
错误响应
失败后可以通过 error 以及 error_description 了解本次授权失败的原因。
https://client.abc.com/cb?state={state}&error=invalid_request&error_description=invalid_request
第二步:授权码 code 请求 access_token
通过第一步获取的 code,请求 access_token,会同时返回 refresh_token,请妥善保管。
POST /oauth/token HTTP/1.1 Host: {youdoamin}.kf5.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
认证方式
BASIC AUTH 认证,username 和 password 分别为 client 注册时生成的『OAUTH客户端唯一标识』和『通信秘钥』。
请求参数
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 填写 authorization_code |
code | 是 | 临时授权码 |
正确响应
{ "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGF3bi5rZjUuY28iLCJhdWQiOiJodHRwOlwvXC9kYXduLmtmNS5jb1wvY2xpZW50XC9pbmRleCIsImlhdCI6MTUwODIwOTUwOCwibmJmIjoxNTA4MjA5NTY4LCJleHAiOjE1MDgyMTMxMDgsInVpZCI6Ijc0NCIsInNjb3BlcyI6InJlYWQsdGlja2V0OndyaXRlIiwiaWQiOiIxMDAwMDExIn0.BFy35PGyQr0OS7ZxPYFiI_VkiYj7fjkweF1bCIETGkE", "token_type": "bearer", "expires_in": 3600, "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGF3bi5rZjUuY28iLCJhdWQiOiJodHRwOlwvXC9kYXduLmtmNS5jb1wvY2xpZW50XC9pbmRleCIsImlhdCI6MTUwODIwOTUwOCwibmJmIjoxNTA4MjA5NTY4LCJleHAiOjE1MDgyMTY3MDgsImlkIjoiMTAwMDAxMSJ9.UpnsxNRe-AO9nUcfQiwXU1nVaDjoAMOLYzkqbq_tqpI" }
响应参数
参数 | 说明 |
---|---|
access_token | 用户资源访问票据 |
token_type | token类型,固定为 bearer |
expires_in | access_token有效期,2 小时 |
refresh_token | 刷新码,有效期为 30 天 |
错误响应
{ "error":"invalid_grant", "error_description":"The Authorization code is invalid" }
用 refresh_token 刷新 access_token
access_token 过期后,用 refresh_token 刷新 access_token。
POST /oauth/token/refresh HTTP/1.1 Host: {youdoamin}.kf5.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGF3bi5rZjUuY28iLCJhdWQiOiJodHRwOlwvXC9kYXduLmtmNS5jb1wvY2xpZW50XC9pbmRleCIsImlhdCI6MTUwODIwOTUwOCwibmJmIjoxNTA4MjA5NTY4LCJleHAiOjE1MDgyMTY3MDgsImlkIjoiMTAwMDAxMSJ9.UpnsxNRe-AO9nUcfQiwXU1nVaDjoAMOLYzkqbq_tqpI
请求参数
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 填写 authorization_code |
refresh_token | 是 | 刷新码,有效期为 30 天 |
正确响应
{ "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGF3bi5rZjUuY28iLCJhdWQiOiJodHRwOlwvXC9kYXduLmtmNS5jb1wvY2xpZW50XC9pbmRleCIsImlhdCI6MTUwODIwOTUwOCwibmJmIjoxNTA4MjA5NTY4LCJleHAiOjE1MDgyMTMxMDgsInVpZCI6Ijc0NCIsInNjb3BlcyI6InJlYWQsdGlja2V0OndyaXRlIiwiaWQiOiIxMDAwMDExIn0.BFy35PGyQr0OS7ZxPYFiI_VkiYj7fjkweF1bCIETGkE", "token_type": "bearer", "expires_in": 3600, "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGF3bi5rZjUuY28iLCJhdWQiOiJodHRwOlwvXC9kYXduLmtmNS5jb1wvY2xpZW50XC9pbmRleCIsImlhdCI6MTUwODIwOTUwOCwibmJmIjoxNTA4MjA5NTY4LCJleHAiOjE1MDgyMTY3MDgsImlkIjoiMTAwMDAxMSJ9.UpnsxNRe-AO9nUcfQiwXU1nVaDjoAMOLYzkqbq_tqpI" }
错误响应
{ "error":"invalid_grant", "error_description":"refresh token is invalid" }
第三步:用 access_token 调用资源接口
用 access_token 调用资源接口,调用成功的前提是,access_token 有效,且接口对应的 授权域 包含在 access_token 的授权域中。
支持接口如下:
授权域(scope) | 接口 | 说明 |
---|---|---|
user:read | /oauth/resource/userinfo | 用于获取用户个人信息 |
client 授权域
协议规范中叫 scope,用于 OAUTH 授权访问时的权限控制。user:read 为基础授权域,若授权时仅指定了其他授权域将自动包含该域,目前仅支持 user:read。
OAUTH 授权错误汇总
错误 | 可能原因 |
---|---|
invalid_request | 参数缺失、包含了无效的参数值 |
unauthorized_client | client未被授权 |
access_denied | 用户或授权服务器拒绝了这次请求 |
unsupported_response_type | 错误的 response_type |
invalid_scope | 无效、未知或非法的授权范围 |
invalid_client | client认证失败,比如未知的 client,未包含认证头,或不支持的认证方法 |
invalid_grant | 授权码、资源票据或刷新 token 无效 |
unsupported_grant_type | 不支持的 grant_type 类型 |
server_error | 授权服务器异常 |
temporarily_unavailable | 授权服务器临时性无法处理当前请求,原因包括临时性的负载高峰或维护 |