阮一峰-理解OAuth2
微博
Web:
请求授权接口
* https://api.weibo.com/oauth2/authorize
请求方式
* GET/POST
请求参数
必选 | 类型及范围 | 说明 | |
---|---|---|---|
client_id | true | string | 申请应用时分配的AppKey。 |
redirect_uri | true | string | 授权回调地址,站外应用需与设置的回调地址一致,站内应用需填写canvas page的地址。 |
scope | false | string | 申请scope权限所需参数,可一次申请多个scope权限,用逗号分隔。 |
state | false | string | 用于保持请求和回调的状态,在回调时,会在Query Parameter中回传该参数。开发者可以用这个参数验证请求有效性,也可以记录用户请求授权页前的位置。这个参数可用于防止跨站请求伪造(CSRF)攻击 |
display | false | string | 授权页面的终端类型,取值见下面的说明。 |
forcelogin | false | boolean | 是否强制用户重新登录,true:是,false:否。默认false。 |
language | false | string | 授权页语言,缺省为中文简体版,en为英文版。 |
返回参数
返回值字段 | 字段类型 | 字段说明 |
---|---|---|
code | string | 用于第二步调用oauth2/access_token接口,获取授权后的access token。 |
state | string | 如果传递参数,会回传该参数。 |
返回示例
* http://your_redirect_uri?code=CODE
请求access_token接口
* https://api.weibo.com/oauth2/access_token
请求方式
* POST
请求参数
必选 | 类型及范围 | 说明 | |
---|---|---|---|
client_id | true | string | 申请应用时分配的AppKey。 |
client_secret | true | string | 申请应用时分配的AppSecret。 |
grant_type | true | string | 请求的类型,填写authorization_code |
grant_type为authorization_code时
必选 | 类型及范围 | 说明 | |
---|---|---|---|
code | true | string | 调用authorize获得的code值。 |
redirect_uri | true | string | 回调地址,需需与注册应用里的回调地址一致。 |
返回数据
{
"access_token": "ACCESS_TOKEN",
"expires_in": 1234,
"remind_in":"798114",
"uid":"12341234"
}
返回值字段 | 字段类型 | 字段说明 |
---|---|---|
access_token | string | 用户授权的唯一票据,用于调用微博的开放接口,同时也是第三方应用验证微博用户登录的唯一票据,第三方应用应该用该票据和自己应用内的用户建立唯一影射关系,来识别登录状态,不能使用本返回值里的UID字段来做登录识别。 |
expires_in | string | access_token的生命周期,单位是秒数。 |
remind_in | string | access_token的生命周期(该参数即将废弃,开发者请使用expires_in)。 |
uid | string | 授权用户的UID,本字段只是为了方便开发者,减少一次user/show接口调用而返回的,第三方应用不能用此字段作为用户登录状态的识别,只有access_token才是用户授权的唯一票据。 |
查询用户access_token的授权相关信息
* https://api.weibo.com/oauth2/get_token_info
请求方式
* POST
请求参数
* access_token:用户授权时生成的access_token。
返回数据
{
"uid": 1073880650,
"appkey": 1352222456,
"scope": null,
"create_at": 1352267591,
"expire_in": 157679471
}
返回值字段 | 字段类型 | 字段说明 |
---|---|---|
uid | string | 授权用户的uid。 |
appkey | string | access_token所属的应用appkey。 |
scope | string | 用户授权的scope权限。 |
create_at | string | access_token的创建时间,从1970年到创建时间的秒数。 |
expire_in | string | access_token的剩余时间,单位是秒数。 |
调用API接口
* 使用以上获取的access_token,调用相应接口获得相应信息
Web:
获取Authorization Code
* https://graph.qq.com/oauth2.0/authorize
请求方式
* GET
请求参数
参数 | 是否必须 | 含义 |
---|---|---|
response_type | 必须 | 授权类型,此值固定为“code”。 |
client_id | 必须 | 申请QQ登录成功后,分配给应用的appid。 |
redirect_uri | 必须 | 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。 |
state | 必须 | client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 |
scope | 可选 | 请求用户授权时向用户显示的可进行授权的列表。 可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。例如:scope=get_user_info,list_album,upload_pic,do_like不传则默认请求对接口get_user_info进行授权。建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。 |
display | 可选 | 仅PC网站接入时使用。 用于展示的样式。不传则默认展示为PC下的样式。如果传入“mobile”,则展示为mobile端下的样式。 |
g_ut | 可选 | 仅WAP网站接入时使用。 |
QQ登录页面版本(1:wml版本; 2:xhtml版本),默认值为1。
返回说明
1. 如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值。如:
http://graph.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test
通过Authorization Code获取Access Token
* https://graph.qq.com/oauth2.0/token
请求方法:
* GET
请求参数:
参数 | 是否必须 | 含义 |
---|---|---|
grant_type | 必须 | 授权类型,在本步骤中,此值为“authorization_code”。 |
client_id | 必须 | 申请QQ登录成功后,分配给网站的appid。 |
client_secret | 必须 | 申请QQ登录成功后,分配给网站的appkey。 |
code | 必须 | 上一步返回的authorization code。 |
redirect_uri | 必须 | 与上面一步中传入的redirect_uri保持一致。 |
如果用户成功登录并授权,则会跳转到指定的回调地址,并在URL中带上Authorization Code。
例如,回调地址为www.qq.com/my.php,则跳转到:
http://www.qq.com/my.php?code=520DD95263C1CFEA087******
注意此code会在10分钟内过期。
返回说明:
* 如果成功返回,即可在返回包中获取到Access Token。 如:
access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14
参数说明 | 描述 |
---|---|
access_token | 授权令牌,Access_Token。 |
expires_in | 该access token的有效期,单位为秒。 |
refresh_token | 在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。 |
获取用户OpenID_OAuth2.0
* http://graph.qq.com/oauth2.0/me
请求方式
* GET
请求参数
参数 | 是否必须 | 含义 |
---|---|---|
access_token | 必须 | 在上一步中获取到的access token。 |
返回参数
{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID"
}
OpenAPI调用接口
* 使用上面获取到的 openid、access_token 调用相应的接口,获取当前用户相应的信息
如何申请微博授权:
即可填写需要的回调地址等,进行授权
对于如何申请QQ的OAuth授权过程,到目前为止,我还未申请成功过。有了后续的结果,会及时更新。