企业一站式登录协议标准
更新: 2017-02-20
目标
用户在企业内部系统中处于已登录状态下,可以一键登录到够快网站,而不需要再输入帐号密码; 也可用于客户端登录集成。
限制
只允许通过外部帐号数据源(包括AD和LDAP)同步的帐号,和通过 部门和成员操作 添加的帐号才允许使用当前协议登录。
步骤
- 用户登录企业内部系统
- 用户点击企业内部系统的”登录够快”按钮
- 企业内部系统将用户登录帐号信息作为参数跳转到够快(跳转地址定义见下一节)
- 够快获取帐号信息, 并验证签名
- 验证成功后自动登录
请求
GET /account/autologin/entgrant?client_id={client_id}&ticket={ticket}&returnurl={url}&format={format} HTTP/1.1
Host: yk3.gokuai.com
参数
参数名 | 必需 | 说明 |
---|---|---|
client_id | 是 | 企业管理后台中, 管理员在授权管理 添加的授权client_id 授权管理在哪里? |
ticket | 是 | 企业内部系统将当前登录用户的账号信息通过算法生成的值(算法定义见下一节) |
returnurl | 否 | 登录成功后跳转的URL, 需要做rfc3986 URL编码, 不传则跳转到默认界面; 当参数 format=json 时, 当前参数无效 |
format | 否 | 返回数据格式, 默认为空, 如果设值为json , 则返回JSON {"gkkey": "随机字符串"} , 调用 登录与授权API (grant_type=gkkey) 即可获得access_token , 用于客户端登录集成 |
示例:
http://yk3.gokuai.com/account/autologin/entgrant?client_id=xxxxxxxx&ticket=xxxxxxxx
ticket参数值算法
ticket
参数的原始值为JSON字符串:
{
"account": 用户账号,
"n": 6个随机字符,
"t": unix当前时间戳,
"sign": 签名
}
其中sign
的计算方法如下:
- 将
account
,n
,t
对应的值使用回车符\n
组合, 例如以下JSON:
{
"account": "gokuai",
"n": "abcdef",
"t": 1356019200
}
- 组合:
"gokuai" + "\n" + "abcdef" + "\n" + "1356019200"
- 将组合结果使用
授权管理
中client_id
对应的client_secret
作为key进行hmac-sha1加密,然后再进行base64 encode
sign = base64_encode(hmac-sha1("gokuai{\n}abcdef{\n}1356019200", {client_secret}))
最后, 将ticket
的原始值(JSON字符串)做base64
编码, 再做rfc3986
URL编码