Refresh Token
简介
对于从百度开放平台申请到允许永久授权权限的应用,无论其采用Authorization Code、Reource Owner Password Credentials、Client Credentials中的哪一个去获取Access Token,都会拿到一个有效期为个月的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。注意一个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": "expired_token", "error_description": "refresh token has been used" }
我要提问题