首页 > 使用Refresh Token获取Access Token

使用Refresh Token获取Access Token

目录

简介

        对于从百度开放平台申请到允许永久授权权限的应用,无论其采用Authorization Code、Reource Owner Password Credentials、Client Credentials中的哪一个去获取Access Token,都会拿到一个有效期为1个月的Access Token和有效期为10年的Refresh Token。对于这些应用,只要用户在10年内登陆应用,应用就可以使用Refresh Token刷新以获得新的Access Token(新的Refresh Token也会同时下发),从而达到只要用户不连续10年未登陆过你的应用就不需要重新登陆的目的。

获取Access Token

请求数据包格式

        使用Refresh Token刷新以获得新的Access Token,需要应用在其服务端发送请求(推荐用POST方法)到百度OAuth2.0授权服务的“https://openapi.baidu.com/oauth/2.0/token”地址上,并带上以下参数:

  • grant_type:必须参数,固定为“refresh_token”;
  • refresh_token:必须参数,用于刷新Access Token用的Refresh Token;
  • client_id:必须参数,应用的API Key;
  • client_secret:必须参数,应用的Secret Key;
  • scope:非必须参数。以空格分隔的权限列表,若不传递此参数,代表请求的数据访问操作权限与上次获取Access Token时一致。通过Refresh Token刷新Access Token时所要求的scope权限范围必须小于等于上次获取Access Token时授予的权限范围。关于权限的具体信息请参考“权限列表”。

        例如:

https://openapi.baidu.com/oauth/2.0/token?
    grant_type=refresh_token&
    refresh_token=2.e8b7dbabc28f731035f771b8d15063f23.5184000.1292922000-2346678-124328&
    client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&
    client_secret= 0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&
    scope=email

响应数据包格式

        若参数无误,服务器将返回一段JSON文本,包含以下参数:

  • access_token:要获取的Access Token;
  • expires_in:Access Token的有效期,以秒为单位;请参考“Access Token生命周期方案
  • refresh_token:用于刷新Access Token 的 Refresh Token,并不是所有应用都会返回该参数;(10年的有效期
  • scope:Access Token最终的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限),关于权限的具体信息参考“权限列表”一节;
  • session_key:基于http调用Open API时所需要的Session Key,其有效期与Access Token一致;
  • session_secret:基于http调用Open API时计算参数签名用的签名密钥。

        例如:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
 
{
    "access_token": "1.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-2346678-124328",
    "expires_in": 86400,
    "refresh_token": "2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328",
    "scope": "basic email",
    "session_key": "ANXxSNjwQDugf8615OnqeikRMu2bKaXCdlLxn",
    "session_secret": "248APxvxjCZ0VEC43EYrvxqaK4oZExMB",
}

        若请求错误,服务器将返回一段JSON文本,包含以下参数:

  • error:错误码;关于错误码的详细信息请参考“百度OAuth2.0错误响应”一节。
  • error_description:错误描述信息,用来帮助理解和解决发生的错误。

        例如:

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
 
{
    "error": "invalid_grant",
    "error_description": "Invalid authorization code: ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn"
}

开发者需要注意的事项

  • 默认情况下,Access Token的有效期为永久(一个月的Access Token + 10年的Refresh Token)。关于Token方案的详细信息,请参考“Access Token生命周期方案”一节。
  • 获取Access Token时所返回的session_key和session_secret参数不是OAuth2.0协议标准规定的返回参数,而是百度OAuth2.0服务扩展加入的,目的是使得开发者可以基于http调用百度的Open API,因为基于https调用Open API虽然更为简单,但毕竟响应速度更差(比基于http的要差一倍时间左右)。