微博&QQ OAuth2授权步骤整理

阮一峰-理解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,调用相应接口获得相应信息


QQ

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 OAuth2授权步骤整理”的想法

  1. 如何申请微博授权:

    • 微博开放平台
    • 微连接->网站接入
    • 创建应用
    • 创建完毕->我的应用
    • 接口管理
    • 授权机制

    即可填写需要的回调地址等,进行授权

  2. 对于如何申请QQ的OAuth授权过程,到目前为止,我还未申请成功过。有了后续的结果,会及时更新。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据