OAuth2.0认证介绍
OAuth2.0鉴权
目录[隐藏] |
腾讯微博OAuth2.0认证介绍
腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。
广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上您的智慧,将创造出无穷的应用和乐趣。
在使用腾讯微博平台提供的API前,您需要做以下两步工作:
- 成为开发者,并申请appkey和appsecret
- 授权获取accesstoken
Accesstoken是第三方获得用户授权的凭证,是第三方访问api资源的票据。目前,腾讯微博采用Oauth2.0协议对第三方进行授权,相对Oauth1.0来说,Oauth2.0具有更加简单和安全特点。
关于Oauth2.0的详细介绍,请参考Oauth2.0协议标准。
如果您需要使用Oauth1.0授权,请参考腾讯微博Oauth1.0授权协议。
获取accesstoken的两种方式
用户通过Oauth2.0授权第三方有两种方式:
- Authorization code grant,适合于有server端的应用授权
- Implicit grant,适合于通过客户端访问的应用授权
Authorization cod模式和Implicit模式仅在授权的时候有所区别,后续调用API的方式是一致的。
1.Authorization code grant
使用场景:
Authorization code授权适用于PC,无线客户端等需要和第三方server进行交互的应用场景。使用Authorization code授权,第三方能够集中处理用户的授权请求和授权结果,适用于有server端的应用。
授权流程:
Authorization code授权模式分为两步,首先获取code,然后用code换取accesstoken。官方流程示意图:

交互图:

第一步:请求code
请求方法:
GET
请求地址:
https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&response_type=code&redirect_uri=http://www.myurl.com/example
请求参数:
| 字段 | 必须 | 说明 |
|---|---|---|
| client_id | true | 申请应用时分配的app_key |
| redirect_uri | true | 授权回调地址,必须和应用注册的地址一致 |
| response_type | true | 授权类型,为code |
| wap | false | 主要用于指定手机授权页的版本,无此参数默认显示pc授权页面
wap=1时,跳转到wap1.0的授权页 |
| state | false | 用于保持请求和回调的状态,授权请求成功后原样带回给第三方。该参数用于防止csrf攻击(跨站请求伪造攻击),强烈建议第三方带上该参数。参数设置建议为简单随机数+session的方式 |
| forcelogin | false | 针对pc授权页 forcelogin=true,强制弹出登录授权页面 forcelogin=false,用户已经登录并且已经授权第三方应用,则不再弹出授权页面 默认为forcelogin=true |
返回结果:
如果授权成功,授权服务器会将用户的浏览器重定向到redirect_uri,并带上code,openid和openkey等参数,重定向的url如下:
http://www.myurl.com/example?code=CODE&openid=OPENID&openkey=OPENKEY
参数说明:
| 字段 | 说明 |
|---|---|
| code | 用来换取accesstoken的授权码,有效期为10分钟 |
| openid | 用户统一标识,可以唯一标识一个用户 |
| openkey | 与openid对应的用户key,是验证openid身份的验证密钥 |
第二步:请求accesstoken
请求地址:
https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&client_secret=APP_SECRET&redirect_uri=http://www.myurl.com/example&grant_type=authorization_code&code=CODE
请求参数:
| 字段 | 必须 | 说明 |
|---|---|---|
| client_id | true | 申请应用时分配的app_key |
| client_secret | true | 申请应用时分配的app_secret |
| grant_type | true | authorization_code |
| code | true | 调用authorize时返回的code |
| redirect_uri | true | 授权回调地址,必须和应用注册的地址一致 |
| state | false | 用于保持请求和回调的状态,授权请求成功后原样带回给第三方。该参数用于防止csrf攻击(跨站请求伪造攻击),强烈建议第三方带上该参数。参数设置建议为简单随机数+session的方式 |
返回结果:
access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN
参数说明:
| 字段 | 说明 |
|---|---|
| access_token | 访问第三方资源的凭证 |
| expires_in | accesstoken过期时间,以返回的时间的准,单位为秒,注意过期时提醒用户重新授权 |
| refresh_token | 刷新token |
2.Implicit grant
使用场景:
Implicit grant授权适用于没有server端的客户端应用,由客户端发起授权请求,保存和处理accesstoken。
授权流程:
官方流程示意图:

交互图:

请求地址:
https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&response_type=token&redirect_uri=http://www.myurl.com/example
请求参数:
| 字段 | 必须 | 说明 |
|---|---|---|
| client_id | true | 申请应用时分配的app_key |
| redirect_uri | true | 授权回调地址,必须和应用注册的地址一致 |
| response_type | true | 授权类型,为token |
| wap | false | 主要用于指定手机授权页的版本,无此参数默认显示pc授权页面
wap=1时,跳转到wap1.0的授权页 |
| state | false | 用于保持请求和回调的状态,授权请求成功后原样带回给第三方。该参数用于防止csrf攻击(跨站请求伪造攻击),强烈建议第三方带上该参数。参数设置建议为简单随机数+session的方式 |
| forcelogin | false | 针对pc授权页 forcelogin=true,强制弹出登录授权页面 forcelogin=false,用户已经登录并且已经授权第三方应用,则不再弹出授权页面 默认为forcelogin=true |
返回结果:
http://www.myurl.com/example#access_token=ACCESS_TOKEN&expires_in=60&openid=OPENID&openkey=OPENKEY
参数说明:
| 字段 | 说明 |
|---|---|
| access_token | accesstoken,访问api资源的凭证 |
| expires_in | accesstoken过期时间,以系统返回的过期时间为准,注意过期时提醒用户重新授权 |
| openid | 用户统一标识,可以唯一标识一个用户 |
| openkey | 与openid对应的用户key,是验证openid身份的验证密钥 |
刷新accesstoken
Oauth2中,access_token的有效期不是无限的,当第三方应用使用的access_token时间超过了其生命周期时,可以通过刷新机制来获取新的access_token。
请求地址
https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
请求参数
| 字段 | 必须 | 说明 |
|---|---|---|
| client_id | true | 申请应用时分配的app_key |
| grant_type | true | 固定为“refresh_token” |
| refresh_token | true | 上次授权或者刷新时获取的refresh_token |
返回结果
返回字符串:
access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN&name=NAME
参数说明
| 字段 | 说明 |
|---|---|
| access_token | access_token,访问api资源的凭证 |
| expires_in | access_token过期时间,以系统返回的过期时间为准,注意过期时提醒用户重新授权 |
| refresh_token | 刷新token |
| name | 授权用户微博帐号 |
注:
通过刷新机制可以延长access_token有效期,每次刷新延长的access_token有效期与授权时access_token的有效期一致,多次刷新可将access_token的有效期延长至一年。
访问API资源
请求方法
GET/POST
请求参数(公共部分)
https://open.t.qq.com/api/REQUEST_METHOD?oauth_consumer_key=APP_KEY&access_token=ACCESSTOKEN&openid=OPENID&clientip=CLIENTIP&oauth_version=2.a&scope=all
其中REQUEST_METHOD为需要请求的api接口,可以参考api资源列表。
请求的参数中,Oauth部分需包含:
| 字段 | 说明 |
|---|---|
| oauth_consumer_key | appkey |
| access_token | 授权获得的accesstoken |
| openid | 授权获取的openid |
| clientip | 客户端的ip |
| oauth_version | 版本号,必须为2.a |
| scope | 请求权限范围(默认“all”) |
其他部分参数参考各api参数要求。
使用案例
accesstoken过期时间
应用级别: accesstoken有效期
初级、高级及腾讯合作方应用,accesstoken有效期均为三个月
错误码说明
请参考错误码说明
OAuth2.0认证介绍的更多相关文章
- 腾讯微博OAuth2.0认证介绍
腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整 ...
- .Net WebApi 实现OAuth2.0认证
现在多数公众平台提供的api都使用OAuth2.0认证模式,最近在搞Android方面的开发,身份认证和权限控制的各方面比较来说,使用OAuth认证的还是比较靠谱,OAuth2.0的协议可以参考htt ...
- Owin中间件搭建OAuth2.0认证授权服务体会
继两篇转载的Owin搭建OAuth 2.0的文章,使用Owin中间件搭建OAuth2.0认证授权服务器和理解OAuth 2.0之后,我想把最近整理的资料做一下总结. 前两篇主要是介绍概念和一个基本的D ...
- 使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
- C# 网络编程之豆瓣OAuth2.0认证具体解释和遇到的各种问题及解决
近期在帮人弄一个豆瓣API应用,在豆瓣的OAuth2.0认证过程中遇到了各种问题,同一时候自己须要一个个的尝试与解决,终于完毕了豆瓣API的訪问.作者这里就不再吐槽豆瓣的认证文档了,毕 ...
- OAuth2.0认证和授权以及单点登录
https://www.cnblogs.com/shizhiyi/p/7754721.html OAuth2.0认证和授权机制讲解 2017-10-30 15:33 by shizhiyi, 2273 ...
- Spring Security OAuth2.0认证授权一:框架搭建和认证测试
一.OAuth2.0介绍 OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容. 1.s ...
- Spring Security OAuth2.0认证授权二:搭建资源服务
在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...
- Spring Security OAuth2.0认证授权四:分布式系统认证授权
Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...
随机推荐
- MongoDB基本命令随便敲敲
1,mongoDB状态,版本,当前连接的数据库名称
- 【转】android 电池(二):android关机充电流程、充电画面显示
关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...
- MTK 2G芯片使用联通卡在深圳无法拨打112原因
2.75G GSM模块在深圳客户这边联调到最后,客户这边遇到各种概率性问题,基本都是对方使用的配件不够好造成的,如天线.SIM卡座等配件. 一旦这些配件不好,就会出现概率性的错误,非常难以复现,所以在 ...
- Mock.js:前后端分离开发工具
概述 Mock.js实现的功能 基于 数据模板 生成数据 基于 HTML模板 生成数据 拦截并模拟 Ajax请求 用法 浏览器: <!-- (必选)加载 Mock --> <scri ...
- HDU2037 贪心 动归均可+证明
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- tail
tail用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理.常用查看日志文件. -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n& ...
- SQL Server2008R2安装失败问题之语言包问题
今天安装SQL Server2008 的时候出现了,如下的的问题,安装过程在ExcuteStandardTimingsWorkflow时候报错,结束安装. 提示: ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
- GPS数据处理 - 字符串函数的灵活应用
题目内容: NMEA- 0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA- The National Mari ...
- java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.LoginActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.L ...