docs/oauth/client - 百度开放云平台
首页 > 帮助文档首页 > 百度OAuth > Client Credentials授权

Client Credentials授权

<sidebar>sidebar:oauth_menu<sidebar>

目录

简介

        采用Client Credentials方式,即应用公钥、密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open API,并且需要开发者提前向百度开放平台申请,成功对接后方能使用。其流程示意图如下:

oauth%2Fclient_credentials.gif

        对于应用而言,其流程只有一步,即直接获取Access Token。

获取Access Token

请求数据包格式

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

  • grant_type:必须参数,固定为“client_credentials”;
  • client_id:必须参数,应用的API Key;
  • client_secret:必须参数,应用的Secret Key;
  • scope:非必须参数。以空格分隔的权限列表,采用本方式获取Access Token时只能申请跟用户数据无关的数据访问权限。关于权限的具体信息请参考“权限列表”。

        例如:

https://openapi.baidu.com/oauth/2.0/token?
    grant_type=client_credentials&
    client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&
    client_secret= 0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&

响应数据包格式

响应数据包格式

        若参数无误,服务器将返回一段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.385d55f8615fdfd9edb7c4b5ebdc3e39.604800.1293440400-2346678-124328",
    "scope": "public",
    "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过期可以重新获取。
  • 获取Access Token时所返回的session_key和session_secret参数不是OAuth2.0协议标准规定的返回参数,而是百度OAuth2.0服务扩展加入的,目的是使得开发者可以基于http调用百度的Open API,因为基于https调用Open API虽然更为简单,但毕竟响应速度更差(比基于http的要差一倍时间左右)。