# 1. 概述

如果百度用户访问第三方应用网页,则第三方应用可以通过网页授权机制,来获取百度用户基本信息,进而实现自身业务功能。 

具体而言,百度帐号网页授权流程分为四步:

  1. 引导用户进入授权页面同意授权,获取code;

  2. 通过code换取网页授权access_token;

  3. 如果需要,开发者可以刷新网页授权access_token,避免过期;

  4. 通过网页授权access_token获取用户基本信息。

# 2. 引导用户完成授权获取code

开发时,需要将用户浏览器重定向到如下URL地址。 

接口调用请求说明:

GET https://openapi.baidu.com/oauth/2.0/authorize?response_type=CODE&client_id=API_KEY&redirect_uri=REDIRECT_URI&scope=SCOPE&state=STATE

参数说明:

参数名 类型 是否必须 描述
response_type string  是  固定为 code。
client_id string 注册应用时获得的API Key。
redirect_uri string 授权后要回调的URI,即接收Authorization Code的URI。如果用户在授权过程中取消授权,会回调该URI,并在URI末尾附上error=access_denied参数。对于无Web Server的应用,其值可以是“oob”,此时用户同意授权后,授权服务会将Authorization Code直接显示在响应页面的页面中及页面title中。非“oob”值的redirect_uri按照如下规则进行匹配:(1)如果开发者在“授权安全设置”中配置了“授权回调地址”,则redirect_uri必须与“授权回调地址”中的某一个相匹配; (2)如果未配置“授权回调地址”,redirect_uri所在域名必须与开发者注册应用时所提供的网站根域名列表或应用的站点地址(如果根域名列表没填写)的域名相匹配。授权回调地址配置请参考附录Ⅰ-1
scope string 以空格分隔的权限列表,若不传递此参数,代表请求用户的默认权限。可填basic或mobile。
display string 登录和授权页面的展现样式,默认为“page”,具体参数定义请参考附录Ⅰ-2
state string 重定向后会带上state参数。建议开发者利用state参数来防止CSRF攻击。
force_login int 如传递“force_login=1”,则加载登录页时强制用户输入用户名和口令,不会从cookie中读取百度用户的登陆状态。
confirm_login int 如传递“confirm_login=1”且百度用户已处于登陆状态,会提示是否使用已当前登陆用户对应用授权。
login_type string 如传递“login_type=sms”,授权页面会默认使用短信动态密码注册登陆方式。
qrext_clientid string 网盘扫码透传字段
bgurl string 二维码登录方式的背景图片url链接,需要encode
qrcodeW int 自定义二维码图片的宽度
qrcodeH int 自定义二维码图片的高度
qrcode int 如传递“qrcode=1”,登录授权页面将增加扫码登录入口;注:扫码登录入口点击跳转至二维码页面,目前支持PC、TV、音箱、watch、kindle
qrloginfrom string 扫码登录被扫码端设备类型;目前传参仅支持:pc、tv、speakers、watch、kindle;注:speakers为音箱的标志;说明:此配置仅支持display=tv时;
userReg int 如传递“qrcode=1”,扫码登录页配置“用户名登录”、“注册”入口;说明:此配置仅支持display=tv时;
appTip string 扫码登录页二维码底部提示文案,中文文案需encodeURIComponent('提示文案');说明:此配置仅支持display=tv时;
appName string 扫码登录页二维码底部app文案配置,中文文案需encodeURIComponent('网盘App');说明:此配置仅支持display=tv时;

下图为登录授权页面:

无scope权限或redirect_uri不合法时,会展示错误页面,并提示出错原因,如下图示:



用户同意授权后:页面将跳转至redirect_uri/?code=CODE&state=STATE。 

code说明:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,10分钟未被使用自动过期。

# 3. code获取授权access_token

redirect_uri指定的开发者服务器地址,在获取到授权code参数后,从服务端向百度开放平台发起如下HTTP请求,通过code换取网页授权access_token。 

注意:access_token长度保留256字符。 

接口调用请求说明:

GET https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=CODE&client_id=AP I_KEY&client_secret=SECRET_KEY&redirect_uri=REDIRECT_URI    

参数说明:

参数名  类型  是否必须  描述 
grant_type  string  是  固定为authorization_code 
code  string  是  用户授权后得到code 
client_id  string  是  应用的API Key
client_secret  string  是  应用的Secret Key
redirect_uri  string  是  该值必须与获取Authorization  Code时传递的“redirect_uri”保持一致。

返回值说明:

字段名  类型  描述 
access_token  string  获取到的网页授权接口调用凭证 
expires_in  int  Access Token的有效期,以秒为单位
refresh_token  string  用于刷新Access Token的Refresh Token,所有应用都会返回该参数**(10年的有效期**)
scope  string  Access Token最终的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)
session_key  string  基于http调用Open API时所需要的Session Key,其有效期与Access Token一致
session_secret string  基于http调用Open  API时计算参数签名用的签名密钥

错误情况下:

字段名  类型  描述 
error  string  错误码,关于错误码的详细信息请参考附录Ⅰ-3
error_description  string  错误描述信息,用来帮助理解和解决发生的错误

返回值示例:

{  
     "access_token":  "1.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-2346678-124328",  
     "expires_in":  86400,  
     "refresh_token":  "2.385d55f8615fdfd9edb7c4b5ebdc3e39.604800.1293440400-2346678-124328",               
     "scope":  "basic  email",  
     "session_key":  "ANXxSNjwQDugf8615OnqeikRMu2bKaXCdlLxn",  
     "session_secret":  "248APxvxjCZ0VEC43EYrvxqaK4oZExMB"  
} 

出错时返回:

{  
     "error":  "invalid_grant",  
     "error_description":  "Invalid  authorization  code:  ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn"   
} 

# 4. 按需刷新access_token

当access_token过期后,可以使用refresh_token进行刷新。refresh_token有效期为十年。 

接口调用请求说明:

GET https://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=REFRESH_TOKEN &client_id=API_KEY&client_secret=SECRET_KEY 

参数说明:

参数名 类型 是否必须 描述
grant_type string 固定为refresh_token
refresh_token string 通过access_token获取到的refresh_token参数
client_id string 应用的API Key
client_secret string 应用的Secret Key

返回值说明:

字段名  类型  描述 
access_token  string  获取到的网页授权接口调用凭证 
expires_in  int  Access Token的有效期,以秒为单位
refresh_token  string  用于刷新Access Token的Refresh Token,所有应用都会返回该参数(10年的有效期
scope  string  Access Token最终的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)
session_key  string  基于http调用OpenAPI时所需要的Session Key,其有效期与 Access Token一致
session_secret  string  基于http调用OpenAPI时计算参数签名用的签名密钥。

错误情况下:

字段名  类型  描述 
error  string  错误码,关于错误码的详细信息请参考附录Ⅰ-3
error_description  string  错误描述信息,用来帮助理解和解决发生的错误 

返回值示例:

{  
     "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"  
} 

出错时返回:

{
     "error": "expired_token",
     "error_description": "refresh token has been used"
}

# 5. 获取授权用户信息

获取access_token之后,开发者可以通过access_token拉取用户信息。 

接口调用请求说明:

GET https://openapi.baidu.com/rest/2.0/passport/users/getInfo?access_token=access_token 

参数说明:

参数名  类型  是否必须  描述 
access_token  string  是  由上述步骤获取的OpenAPI接口调用凭证 
get_unionid int 需要获取unionid时,传递get_unionid = 1

返回参数:

参数名 参数类型 是否必需 示例值 描述
openid string oPXyY4O0ZTmUqSX4MRxYDDCccT6Kc9E 百度用户的唯一标识,对当前开发者帐号、当前应用唯一
unionid string uA91qQ6gAISTuy0mMqoeh7lZ0w6x478 百度用户统一标识,对当前开发者帐号唯一
userid uint 67411167 老版 百度用户的唯一标识,后续不在返回该字段
securemobile uint 188888888 当前用户绑定手机号(需要向开放平台申请权限)
username string t***e 当前登录用户的展示用户名,包含打码"*"号
portrait string e2c1776c31393837313031319605 当前登录用户的头像,头像地址拼接使用方法:https://himg.bdimg.com/sys/portrait/item/{$portrait}
userdetail string 喜欢自由 自我简介,可能为空。
birthday string 1987-01-010000-00-00为未知 生日,以yyyy-mm-dd格式显示。
marriage string 0:未知,1:单身,2:已婚3:恋爱4:离异 婚姻状况
sex string 0:未知,1:男,2:女 性别
blood string 0:未知,1:A,2:B,3:O,4:AB,5:其他 血型
is_bind_mobile uint 0:未绑定,1:已绑定 是否绑定手机号
is_realname uint 0:未实名制,1:已实名制 是否实名制

错误情况下:

字段名  类型  描述 
error_code  int  错误码 
error_msg  string  错误描述信息,用来帮助理解和解决发生的错误 

关于错误码的详细信息请参考附录Ⅰ-5.4 

返回值示例:

{    
     "openid": "oPXyY4O0ZTmUqSX4MRxYDDCccT6Kc9E",
     "unionid": "uA91qQ6gAISTuy0mMqoeh7lZ0w6x478",
     "userid": "2097322476",
     "username": "u***9",
     "userdetail": "喜欢自由", 
     "birthday": "1987-01-01",
     "marriage": "0",
     "sex": "1",
     "blood": "3",
     "is_bind_mobile": "1",
     "is_realname": "1" 
}

出错时返回:

{  
     "error_code": "100",  
     "error_msg": "Invalid parameter"   
} 
Last Updated: 2/28/2022, 10:45:02 AM