# 授权登录第三方应用

使用知音楼授权登录功能并确认登录您的系统,在您的系统内获得正在访问用户的知音楼身份,而用户无需输入账户密码。

注意:此功能与企业自建应用/第三方企业应用无关,只能用于授权登录打开第三方应用,并且不是知音楼内的应用免登,此流程只能获取到用户身份(无手机号和企业相关信息)。

# 获取 appId 及 appSecret

联系知音楼的产品刘欣老师(liuxin22@tal.com),创建用于授权登录过程中验证身份的 appId 及 appSecret。

需提交字段 是否必填 说明
名称 必填 授权应用的名称
描述 必填 应用使用的场景
授权页面 LOGO 地址 必填 这个会显示在授权页面的中间页中,以 http 或 https 开头

# 获取用户的access_token

# host: https://yach-oapi.zhiyinlou.com 正式环境

# host: https://yach-oapi-dev.zhiyinlou.com 开发环境 (具备调试条件)

# host: https://yach-oapi-test.zhiyinlou.com 测试环境 (具备调试条件)

# 概述

名称
地址 /oauth2/get/access/token
请求方式 POST
参数 见【参数】
返回值 见【返回值】

# 参数

参数 参数类型 必须 说明
grant_type String 授权类型,此处的值固定为"authorization_code",必填
code String 授权码(通过客户端JSSDK里面获取到),必填
redirect_uri String 第三方业务方的跳转链接,必填
app_id String 应用id,必填
signature String 签名,必填

# Signature 参数

签名算法为HmacSHA256,签名数据是除signature参数以外的所有参数,通过&符号连接起来,密钥是appId对应的appSecret计算出来的签名值。

发送HTTP请求时需要把signature进行urlEncode,如果您使用的是HTTP封装方法,请确保不要重复urlEncode。

注意:参数的顺序请按照:code={code值}&grant_type={grant_type值}&redirect_uri={redirect_uri值}&app_id={app_id值}计算

各种语言HMAC SHA256实现

签名计算代码示例(PHP)

    $data = [
        'code'         => $params['code'],
        'grant_type'   => $params['grant_type'],
        'redirect_uri' => $params['redirect_uri'],
        'app_id'       => $params['app_id'],
    ];
    $str       = http_build_query($data); // 注意:参数的顺序请按照:code={code值}&grant_type={grant_type值}&redirect_uri={redirect_uri值}&app_id={app_id值}计算
    $signature = base64_encode(hash_hmac('sha256', $str, '第三方应用的密钥', true));
    var_dump($signature);

# 返回值

{
    "code": 200,
    "msg": "",
    "obj": {
        "access_token": "******",
        "expires_in": 7200,
        "refresh_token": "******",
        "scope": "******",
        "unionid": "用户yachid",
        "openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
    }
}

# 刷新用户的refresh_token

# host: https://yach-oapi.zhiyinlou.com 正式环境

# host: https://yach-oapi-dev.zhiyinlou.com 开发环境 (具备调试条件)

# host: https://yach-oapi-test.zhiyinlou.com 测试环境 (具备调试条件)

# 概述

名称
地址 /oauth2/refresh/token
请求方式 POST
参数 见【参数】
返回值 见【返回值】

# 参数

参数 参数类型 必须 说明
grant_type String 授权类型,此处的值固定为"refresh_token",必填
app_id String 应用id,必填
refresh_token String 填写通过获取用户的access_token接口获取到的 refresh_token 参数,必填

# 返回值

{
    "code": 200,
    "msg": "",
    "obj": {
        "access_token": "用户的access_token",
        "expires_in": 7200,
        "refresh_token": "刷新access_token时使用的token",
        "scope": "权限范围",
        "openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
    }
}

# 获取授权用户的个人信息

# host: https://yach-oapi.zhiyinlou.com 正式环境

# host: https://yach-oapi-dev.zhiyinlou.com 开发环境 (具备调试条件)

# host: https://yach-oapi-test.zhiyinlou.com 测试环境 (具备调试条件)

# 概述

名称
地址 /oauth2/get/userinfo
请求方式 POST
参数 见【参数】
返回值 见【返回值】

# 参数

参数 参数类型 必须 说明
access_token String 用户的access_token,必填
openid String 授权用户唯一标识,填写通过获取用户的access_token接口获取到的 openid 参数,必填

# 返回值

{
    "code": 200,
    "msg": "",
    "obj": {
        "openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
        "nickname": "用户昵称",
        "head_img_url": "用户头像",
        "unionid": "用户统一标识。针对一个开放平台帐号下的应用,同一用户的 unionid 是唯一的"
    }
}
上次更新: 12/21/2020, 9:04:38 PM
foo