OAuth2.0鉴权

目录

[隐藏]

腾讯微博OAuth2.0认证介绍

腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。

广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上您的智慧,将创造出无穷的应用和乐趣。

在使用腾讯微博平台提供的API前,您需要做以下两步工作:

  1. 成为开发者,并申请appkey和appsecret
  2. 授权获取accesstoken

Accesstoken是第三方获得用户授权的凭证,是第三方访问api资源的票据。目前,腾讯微博采用Oauth2.0协议对第三方进行授权,相对Oauth1.0来说,Oauth2.0具有更加简单和安全特点。

关于Oauth2.0的详细介绍,请参考Oauth2.0协议标准
如果您需要使用Oauth1.0授权,请参考腾讯微博Oauth1.0授权协议

获取accesstoken的两种方式

用户通过Oauth2.0授权第三方有两种方式:

  1. Authorization code grant,适合于有server端的应用授权
  2. 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的授权页
wap=2时,跳转到wap2.0的授权页
不带本参数时,手机访问默认跳到wap2.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的授权页
wap=2时,跳转到wap2.0的授权页
不带本参数时,手机访问默认跳到wap2.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参数要求。

使用案例

  1. Authorization code授权案例
  2. Implicit授权案例

accesstoken过期时间

应用级别: accesstoken有效期 
初级、高级及腾讯合作方应用,accesstoken有效期均为三个月

错误码说明

请参考错误码说明

OAuth2.0认证介绍的更多相关文章

  1. 腾讯微博OAuth2.0认证介绍

    腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整 ...

  2. .Net WebApi 实现OAuth2.0认证

    现在多数公众平台提供的api都使用OAuth2.0认证模式,最近在搞Android方面的开发,身份认证和权限控制的各方面比较来说,使用OAuth认证的还是比较靠谱,OAuth2.0的协议可以参考htt ...

  3. Owin中间件搭建OAuth2.0认证授权服务体会

    继两篇转载的Owin搭建OAuth 2.0的文章,使用Owin中间件搭建OAuth2.0认证授权服务器和理解OAuth 2.0之后,我想把最近整理的资料做一下总结. 前两篇主要是介绍概念和一个基本的D ...

  4. 使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  5. C# 网络编程之豆瓣OAuth2.0认证具体解释和遇到的各种问题及解决

            近期在帮人弄一个豆瓣API应用,在豆瓣的OAuth2.0认证过程中遇到了各种问题,同一时候自己须要一个个的尝试与解决,终于完毕了豆瓣API的訪问.作者这里就不再吐槽豆瓣的认证文档了,毕 ...

  6. OAuth2.0认证和授权以及单点登录

    https://www.cnblogs.com/shizhiyi/p/7754721.html OAuth2.0认证和授权机制讲解 2017-10-30 15:33 by shizhiyi, 2273 ...

  7. Spring Security OAuth2.0认证授权一:框架搭建和认证测试

    一.OAuth2.0介绍 OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容. 1.s ...

  8. Spring Security OAuth2.0认证授权二:搭建资源服务

    在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...

  9. Spring Security OAuth2.0认证授权四:分布式系统认证授权

    Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...

随机推荐

  1. hdu 1599 find the mincost route(flyod求最小环)

    Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1, ...

  2. structs 拦截器

    首先,要跟大家道个歉,前一阵子为给客户个一个DEMO,忙得不可开交,所以很久没有更新Blog.提到这个DEMO我想顺便跟大家分享一下心得——如果大家希望快速开发,一个类似Struts 2这样的简单方便 ...

  3. hibernate Restrictions用法

    QBC常用限定方法 Restrictions.eq --> equal,等于. Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相 ...

  4. iOS 系统架构 && 常用 framework

    整理自互联网,感谢原文作者! 1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch lay ...

  5. Beauty of Array(思维)

    Beauty of Array Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has an array A with N integ ...

  6. Swift中NSData与NSDictionary之间的相互转换

    原创Blog,转载请注明出处 使用NSKeyedUnarchiver类来进行相互转换 1.NSDictionary转NSData var dictionaryExample : [String:Any ...

  7. HA高可用的搭建

    HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务.常用 ...

  8. NPOI兼容 excel2003,2007版本

    根据项目需要,需要对excel进行导入导出,所以选择NPOI,优点在这里就不详细介绍了,下面进入正题. public int Import(string path) { IList<Studen ...

  9. 客户端js判断文件类型和文件大小即限制上传大小

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  10. 容联手机接口封装到ThinkPHP3.2.菜鸟图文教学

    今天来说下短信发送技术. 使用的是 容联http://www.yuntongxun.com/ 用法很简单, 具体要知道的参数有 ACCOUNT SID   应用ID AUTH TOKEN 应用toke ...