企业一站式登录协议标准

更新: 2017-02-20

目标

用户在企业内部系统中处于已登录状态下,可以一键登录到够快网站,而不需要再输入帐号密码; 也可用于客户端登录集成。

限制

只允许通过外部帐号数据源(包括AD和LDAP)同步的帐号,和通过 部门和成员操作 添加的帐号才允许使用当前协议登录。

步骤

  1. 用户登录企业内部系统
  2. 用户点击企业内部系统的”登录够快”按钮
  3. 企业内部系统将用户登录帐号信息作为参数跳转到够快(跳转地址定义见下一节)
  4. 够快获取帐号信息, 并验证签名
  5. 验证成功后自动登录

请求

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, 需要做rfc3986URL编码, 不传则跳转到默认界面; 当参数 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编码, 再做rfc3986URL编码