`
zhuzhiguosnail
  • 浏览: 110451 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OAuth 2.0概览

 
阅读更多

OAuth 1.0已经在IETF尘埃落定,编号是RFC5894

http://tools.ietf.org/html/rfc5849

这也标志这OAuth已经正式成为互联网标准协议。

 

OAuth 2.0也早已经开始讨论和建立的草案

 

OAuth在OAuth组织的主页

http://www.oauth.net/2/

 

OAuth2.0的草案

http://tools.ietf.org/html/draft-ietf-oauth-v2-05

 

协议的创始人和推动者说OAuth 2.0的正式版会在今年年底正式发布,现在的草案还很不完善,有很多东西值得继续推敲。

如果你订阅了OAuth的mailing list,你会发现每天都有关于OAuth 2.0的议题,每天都有各种有深度的讨论。

 

作为一个学习者,虽然2.0尚未发布,但是此时跟进学习的好处无疑是巨大的。

①:在学习和研究以及思考如何支持OAuth 1.0的时候,我们并没有一个参照物,这是个崭新概念的互联网协议,我们并不能深刻理解协议这么制定的细节原因,OAuth 2.0无疑是个很好的参照物,作者也说,经过3年的OAuth 1.0开发和协议制定的工作,对OAuth有了很多思考,也理解其中的不足,因此才制定OAuth 2.0协议,所以,作为学习者,跟进学习的意义非常大。

②:协议还在细化制定阶段,通过跟进mailing list,也能理解一个协议制定的过程和讨论的方式。对于一昧的只会Follow协议,这种思路是很难形成的,这对我们增进自己的创新能力无疑也是非常有好处。

 

OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

OAuth 2.0的关注点在于简化客户端程序员的工作,其实是通过细化协议的方式,因为此前的OAuth实际上只提供了一种交换access token的标准机制,并没有针对不同的客户端提供不同的access token交换方式,而OAuth 1.0显然并不是在各种客户端都非常适用的,因此在2.0中,将此细化到各种客户端的flow都有相应的标准,比如web程序,桌面程序,手机或一些设备,都可以通过各自的特点来实现OAuth的flow.

 

学习的第一步,先看看官网推荐的入门文章

 

Eran Hammer's Introduction to OAuth 2.0

 

 

简单历史回顾

OAuth 1.0在2007年的12月底发布并迅速成为工业标准。

2008年6月,发布了OAuth 1.0 Revision A,这是个稍作修改的修订版本,主要修正一个安全方面的漏洞。

2010年四月,OAuth 1.0的终于在IETF发布了,协议编号RFC 5849。
OAuth 2.0的草案是在今年5月初在IETF发布的。

 

OAuth is a security protocol that enables users to grant third-party access to their web resources without sharing their passwords.

OAuth是个安全相关的协议,作用在于,使用户授权第三方的应用程序访问用户的web资源,并且不需要向第三方应用程序透露自己的密码。

 

OAuth 2.0是个全新的协议,并且不对之前的版本做向后兼容,然而,OAuth 2.0保留了与之前版本OAuth相同的整体架构。

这个草案是围绕着OAuth2.0的需求和目标,历经了长达一年的讨论,讨论的参与者来自业界的各个知名公司,包括Yahoo!, Facebook, Salesforce, Microsoft, Twitter, Deutsche Telekom, Intuit, Mozilla, and Google。

 

OAuth has long been the poster-child of rapid open technology adoption, and 2.0 is no exception – Facebook and Twitter already announced support even before the first draft was officially published.

OAuth长期以来都被视为快速开放技术的典范,OAuth 2.0也不例外。Facebook和Twitter甚至已经宣布在官方发布第一个草案前的就会开始支持OAuth 2.0。

[本人注:事实上已经有支持OAuth 2.0的产品了,服务器端包括facebook的Graph Api,客户端方面,苹果的iPhone和iPad上也已经有具体实现了]

 

为什么需要新版本

OAuth 1.0的实现主要是基于两个私有的协议:Flickr的 API Auth和Google的AuthSub,因此OAuth是根据具体的实现经验而产生的最佳解决方案。

OAuth面世三年以来,业界积累了无数的基于此协议的实际开发经验,社区积累的经验和知识也足矣重新思考和改进协议,这主要集中在OAuth1.0支持度不够并且会让人困惑的三个方面。

这三方面内容分别是:

1.Authentication and Signatures

2.User Experience and Alternative Token Issuance Options

3.Performance at Scale

[本人注:对于这三个方面,除了Flow的基本思路没提到,不就几乎是OAuth的全部关键点了?]

 

下面分别对这三个方面进行阐述:

1.Authentication and Signatures

大多数尝试实现OAuth而失败的原因是由于协议规格书中加密需求太过复杂。事实上,初始版本的协议书对此方面的书写非常简陋,帮助不大,即使发布为RFC 5849上的正式版本也是如此。

仅仅使用密码这种方便而简单地方式在OAuth中也是非常缺少的。

 举个例子:

开发人员可以可以快速的写出Twitter脚本,并且通过他们的用户名和密码做一些非常实用的操作。而当这些应用迁移到OAuth的方式去做,他们不得不去寻找,安装,配置lib才能完成原先只需写一行脚本就能完成的工作。

  

2.User Experience and Alternative Token Issuance Options

OAuth主要包括两个方面,通过用户允许的授权方式获取token,使用token获取受保护的资源。

获取access token的方法被称作流程。

OAuth 1.0起初定义了三种流程:基于web的应用程序,桌面客户端,手机等其他设备。然而,随着规范的确立,这三种流程合并成了一种,换句话说,本来应该有所区分的三种不同客户端的流程,最终走的都是一个流程。然而,经过三年的实践,这个流程只在基于web的应用程序时表现出色,对于其他客户端,使用此流程的体验非常差。

随着越来越多的开始使用OAuth,特别对于Twitter,开发人员意识到,OAuth提供的单一流程非常非常受限并且用户体验低劣。另一方面,Facebook的connect提供了一系列的流程来适合不同的客户端,如web程序,移动设备或者游戏主机等。

 

3.Performance at Scale

随着大型的服务提供商开始使用OAuth,社区意识到协议的扩展性不够好,在OAuth的任何一个步骤,都需要状态管理,临时的身份凭据通常丢弃不用,但是更典型的需求是产生生命期很长的身份凭据,这些身份认证需要保存(安全性差,难以管理,需要在数据中心间同步)。

此外,OAuth 1.0需要受保护资源的endpoint(Data server)访问客户的身份凭据从而验证request的有效性,这将破坏大部分大部分大型服务提供商的架构,即CAS集中认证server(centralized authorization server)来发行身份凭据证,其他单独的server用来处理API call。OAuth 1.0 需要使用者两种身份凭据,客户端的身份凭据和token的身份凭据,将此两者分开将非常困难。

 

 

OAuth 2.0的新特性:

6种全新的流程:

User-Agent Flow – 客户端运行于用户代理内(典型如web浏览器)。

Web Server Flow – 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。
Device Flow – 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器
Username and Password Flow – 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。
Client Credentials Flow – 客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。
Assertion Flow – 客户端用assertion去换取access token,比如SAML assertion。

 

可以通过使用以上的多种流程实现Native应用程序对OAuth的支持(程序运行于桌面操作系统或移动折本)

application support (applications running on a desktop or mobile device) can be implemented using many of the flows above.

 

持信人token

OAuth 2.0 提供一种无需加密的认证方式,此方式是基于现存的cookie验证架构,token本身将自己作为secret,通过HTTPS发送,从而替换了通过HMAC和token secret加密并发送的方式,这将允许使用cURL发起APIcall和其他简单的脚本工具而不需遵循原先的request方式并进行签名。

 

签名简化:

对于签名的支持,签名机制大大简化,不需要特殊的解析处理,编码,和对参数进行排序。使用一个secret替代原先的两个secret。

 

短期token和长效的身份凭据

原先的OAuth,会发行一个有效期非常长的token(典型的是一年有效期或者无有效期限制),在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的refresh token。这将允许客户端无需用户再次操作而获取一个新的access token,并且也限制了access token的有效期。

 

角色分开

OAuth 2.0将分为两个角色:

Authorization server负责获取用户的授权并且发布token。

Resource负责处理API calls

 

OAuth 2.0何时发布

OAuth 2.0 目前正由IETF的OAuth工作组制定中,最新的草案已经稳定了,但是很多特性还需修改和增加。部分可用支持在Facebook和Twitter已经可用。最终的版本可能在年底发布。

0
0
分享到:
评论

相关推荐

    oauth2.0中文译本.doc

    ### OAuth 2.0 中文译本核心知识点详解 #### 一、背景知识与重要性 **OAuth 2.0** 是一个开放标准,用于实现应用程序间的授权过程,特别是允许第三方应用安全地获取用户的数据访问权限,而无需直接提供用户凭据。...

    oauth2.0:oauth2.0

    以下是使用 Apache Oltu 和 Jersey 实现 OAuth2.0 的步骤概览: 1. **配置认证服务器**:设置认证服务器,包括定义授权端点、令牌端点和用户信息端点。使用 Apache Oltu 的 `OAuth2Provider` 类来实现这些功能。 2...

    SAML, WS-Federation and OAuth 2.0 tracer-crx插件

    跟踪和解码所有SAML,WS联合身份验证和OAuth 2.0(OIDC)消息 rcFederation跟踪程序跟踪SAML,WS-Federation和OAuth(OIDC)消息。 在浏览时,跟踪程序将收集所有联盟消息,以供您调查。 消息按出现的顺序显示在概览...

    大数据与云计算培训学习资料 人人网开放平台验证与授权方面实践 共62页.pptx

    资料中还提到了从OAuth 1.0到OAuth 2.0的实践历程,包括各个版本的发布和人人网对OAuth的采用,反映了开放平台验证与授权技术的不断成熟和改进。 总的来说,这份学习资料深入浅出地介绍了大数据与云计算环境下的...

    新浪微博接口

    - **OAuth2.0授权机制**:一种用于授权的开放标准协议,用于获取用户权限而不需泄露用户密码,广泛应用于微博API中。 - **SDK源码**:软件开发工具包,提供了与新浪微博API交互的预封装代码,简化了开发过程。 - **...

    unity插件+web,UI +UniWebView 5+应用内直接访问网页,UniWebView 可以用于向您的 Unity

    显示 HTTP 网页,执行 JavaScript,通过 OAuth 2.0 登入,以及更多其他功能。 UniWebView 可以用于向您的 Unity 3D 手机游戏中添加网页视图组件。 概览 UniWebView 包含一组 C# 的高层级 API,它对 iOS 和 ...

    FlashFacebookCookbookAug2013

    - **用户身份验证**:通过OAuth 2.0协议进行用户身份验证。 - **数据交互**:使用Graph API实现数据的读取和写入操作。 ##### 4. **具体应用场景** - **登录和授权**:用户使用Facebook账号登录Flash应用。 - **...

    基于springboot的寝室快修微信小程序源码数据库文档.zip

    2. OAuth2.0授权:SpringBoot可以实现OAuth2.0,为微信小程序提供安全的身份验证,确保用户数据的安全性。 3. 数据存储与查询:SpringBoot可以与各种数据库(如MySQL、MongoDB等)集成,实现数据的存储和查询。在...

    PHP版QQ互联OAuth示例代码分享

    在接入QQ互联时,通常需要使用OAuth 2.0协议,因为它可以保证用户数据的安全性。 #### 示例代码分析 示例代码提供了PHP实现QQ互联OAuth 2.0认证流程的完整过程。从获取授权码(Authorization Code),到通过授权码...

    Spring Android Reference Manual

    - **建立OAuth 2.0连接**:演示如何与支持OAuth 2.0的服务建立连接。 四、Spring Android Core模块 4.1 引言 Spring Android Core模块为整个Spring Android框架提供了核心功能和支持,是其他模块的基础。 4.2 ...

    PHP开发QQ第三方登录功能 实战视频课程

    1. **OAuth2.0协议**: - OAuth2.0是一种允许用户授权第三方应用访问其资源而无需透露用户名和密码的标准协议。 - 流程概述:用户访问应用,应用请求用户授权,用户同意后返回授权码,应用使用授权码换取Access ...

    ASP.NET CORE MVC 2.0 高级编程

    ### ASP.NET Core MVC 2.0 高级编程知识点概览 #### 一、ASP.NET Core MVC 2.0 概述 - **定义与特点**:ASP.NET Core MVC 2.0 是 Microsoft 推出的一个用于构建现代化 Web 应用程序的开源框架。它基于.NET Core ...

    java ssm旅游服务平台小程序毕业论文+ppt.rar

    1. 用户模块:包括用户注册、登录、个人信息管理等功能,可能涉及OAuth2.0等安全机制。 2. 旅游产品展示:展示各类旅游产品信息,如景点介绍、酒店预订、旅游线路等。 3. 搜索与筛选:提供旅游产品的搜索功能,支持...

    Beginning SharePoint 2013 Development

    第十章“Overview of OAuth in SharePoint 2013”则介绍了OAuth 2.0协议在SharePoint中的应用,OAuth是一种安全的授权机制,它允许应用程序代表用户获取访问令牌,从而访问服务器资源。 第三部分“Advanced ...

    阿里云 专有云企业版 V3.6.2 分布式任务调度SchedulerX 开发指南 - 20181228.pdf

    这通常涉及OAuth2.0认证流程,确保安全地访问和操作任务调度服务。 2. **API概览**: SchedulerX API提供了创建、查询、更新和删除任务等功能。开发者可以创建定时任务、周期任务、依赖任务等,并能根据需求调整...

    参照网易云音乐云村做的一个小程序社区,后端技术栈为Java,SpringBoot,MySQL,Redis,前端技术栈.zip

    8. **安全性**:项目可能涉及用户认证和授权,如OAuth2.0或JWT(JSON Web Tokens),以保护用户数据安全。此外,SQL注入防护和XSS攻击防范也是必须考虑的安全措施。 9. **部署与监控**:项目上线后,需要考虑如何...

    WeChatEnterprise.zip

    3. 认证与授权:使用AppID和AppSecret通过OAuth2.0协议获取 accesstoken,它是调用企业微信API的凭证。在实际应用中,通常会使用SDK提供的TokenManager类来管理 accesstoken。 4. 调用API:根据业务需求,选择相应...

Global site tag (gtag.js) - Google Analytics