开放能力 快手登录
# 快手登录
更新时间:2024-07-23 11:06:59
# 简介
快手登录允许用户使用快手账号安全登录第三方应用/网站,从而实现资源共享。授权协议基于标准的 OAuth2.0
协议实现,目前支持账密、扫码登录授权。
# 准备工作
使用快手登录之前,需要在快手开放平台完成入驻和应用申请,得到分配的 app_id
和 app_secret
。
特别注意:
app_secret
务必妥善保管,泄露会导致用户隐私数据被窃取。 存储在客户端并不安全,应该由服务器安全保管。
# 授权流程说明
目前快手授权登录只支持授权码 (Authorization_code
) 模式,流程如下所示:
授权流程说明:
- 在用户同意授权之后,会返回授权临时票据(
code
)给到第三方。如果是客户端应用,通过SDK接口返回;如果是网站应用,则重定向到第三方网站。 - 第三方使用授权临时票据(
code
)和app_id
、app_secret
,通过接口置换access_token
。 access_token
作为第三方应用访问快手开放接口的凭证,可以用来请求用户基本信息或者其他资源接口。
备注:临时授权票据(code
)一次性失效,且有效期仅有 2 分钟,请勿中途插入其他耗时操作。
# 授权接口描述
# 1. 客户端应用授权
通过SDK的方式发起快手登录授权,详细请参考“客户端接入指南“。
# 2. 网站应用授权
通过固定访问链接的方式发起快手登录授权,详细请参考“网站应用接入”。
# 3. code2AccessToken
Method : GET
域名:https://open.kuaishou.com
URL: /oauth2/access_token
Param :
Name Type Must Description app_id string yes 应用唯一标识 app_secret string yes 应用对应的密钥 code string yes 临时授权票据 grant_type string yes 写死 "authorization_code" 即可 Success Response :
{ "result": 1, "access_token": "xxxxxxx", "expires_in": 172800, "refresh_token": "xxxxxx", "refresh_token_expires_in":15552000, "open_id": "xxxxx", "scopes": ["user_info"] }
- result : 错误码。1 表示成功。
- access_token : 授权凭证。
- expires_in :
access_token
的过期时间,单位为秒,有效期为48小时。 - refresh_token :可以用来刷新
access_token
,获取一个新的。 - refresh_token_expires_in :
refresh_token
的过期时间,单位为秒,有效期为180天。 - open_id : 用户在快手的唯一标识 (同一开发主体下唯一)。
- scopes : 本次授权的token包含的scope,如果返回的scope没有包含开发者需要的scope,说明用户没有点击同意授权,开发者在调用相应的openAPI接口的时候,需要让用户授权。
Error Response:
{ "result": 1, "error_msg": "xxxxxxx" }
- result : 错误码。非1 表示失败。
- error_msg : 错误信息。
特别注意:
access_token
是接口访问凭证,泄露会造成用户数据风险。存储在客户端并不安全,应该由服务器安全保管。
# 4. refreshAccessToken
Method : GET
域名:https://open.kuaishou.com
URL : /oauth2/refresh_token
Param :
Name Type Must Description app_id string yes 应用唯一标识 app_secret string yes 应用对应的密钥 refresh_token string yes 有效的refresh_token grant_type string yes 写死 "refresh_token" 即可 Success Response :
{ "result": 1, "access_token": "xxxxxxx", "expires_in": 172800, "refresh_token": "xxxxxx", "refresh_token_expires_in":15552000, "scopes": ["user_info"] }
- result : 错误码。1 表示成功。
- access_token : 授权凭证。
- expires_in :
access_token
的过期时间,单位为秒,有效期为48小时。 - refresh_token :新的有效refresh_token,老的refresh_token随即失效。
- refresh_token_expires_in :
refresh_token
的过期时间,单位为秒,有效期为180天。 刷新的时候,过期时间不会延期,会继承上一个refresh_token
的过期时间。 - scopes : access_token包含的scope,如果返回的scope没有包含开发者需要的scope,说明用户没有点击同意授权,开发者在调用相应的openAPI接口的时候,需要让用户授权。
Error Response:
{ "result": 1, "error_msg": "xxxxxxx" }
- result : 错误码。非1 表示失败。
- error_msg : 错误信息。
特别注意1:
refresh_token
安全性等同access_token
,泄露会造成用户数据风险。存储在客户端并不安全,应该由服务器安全保管。
特别注意2:error_msg返回"refreshToken.discarded"时,说明refresh_token
已被使用过,不能再重复使用。
# Token 常见问题
# 1. token有效期说明:
access_token
有效期:通常为48小时,以接口返回时间为主,有变动可能。refresh_token
有效期:通常为180天,以接口返回时间为主,有变动可能。
# 2. 刷新token后,旧的token是否还能使用?
当access_token
失效之前或者之后,都可以使用有效的refresh_token
去获取一个新的access_token
。
- 新旧
access_token
互不干扰,过期时间独立计算,可以同时有效。 - 接口会同时返回一个
refresh_token
,同时废弃掉老的refresh_token
。
# 3. 刷新accessToken后,新的refreshToken过期时间如何计算?
- 特别注意:新的
refresh_token
过期时间会继承上一个refresh_token
的过期时间。因此返回值refresh_token_expires_in会随时间逐渐递减。 - 因此,当
refresh_token
过期之后,当用户再次使用时,需要第三方主动引导用户再次授权。