# 快手登录

更新时间:2024-07-23 11:06:59

# 简介

快手登录允许用户使用快手账号安全登录第三方应用/网站,从而实现资源共享。授权协议基于标准的 OAuth2.0 协议实现,目前支持账密、扫码登录授权。

# 准备工作

使用快手登录之前,需要在快手开放平台完成入驻和应用申请,得到分配的 app_idapp_secret

特别注意:app_secret 务必妥善保管,泄露会导致用户隐私数据被窃取。 存储在客户端并不安全,应该由服务器安全保管。

# 授权流程说明

目前快手授权登录只支持授权码 (Authorization_code) 模式,流程如下所示:
授权流程.png =1073x

授权流程说明:

  1. 在用户同意授权之后,会返回授权临时票据(code)给到第三方。如果是客户端应用,通过SDK接口返回;如果是网站应用,则重定向到第三方网站。
  2. 第三方使用授权临时票据(code)和app_idapp_secret,通过接口置换 access_token
  3. 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过期之后,当用户再次使用时,需要第三方主动引导用户再次授权。
Copyright ©2025, All Rights Reserved