`

OAuth那些事儿

阅读更多

转自 http://huoding.com/2010/10/10/8

 

OAuth那些事儿

英国诗人蒲柏在牛顿的墓志铭中写道:『自然和自然的法则在黑暗中隐藏,上帝说,让牛顿去吧,于是一切都被照亮!』,而在保护账号安全方面,OAuth起着如同牛顿般中流砥柱的作用,为什么这么说呢?

 

人人网提供了导入MSN联系人的功能,但前提是用户必须提供账号密码,如下图所示:

查找你的MSN联系人中有谁在人人网上

查找你的MSN联系人中有谁在人人网上

人人网信誓旦旦的宣称不会记录你的密码,它甚至提供了一个所谓保证账号安全的方法:先改密码再导入,成功后再改为原密码。不过这样做就安全了么?

什么是OAuth

如今很多网站的功能都强调彼此间的交互,因此我们需要一种简单,标准的解决方案来安全的完成应用的授权,于是,OAuth应运而生,看看官网对其的定义:

An open protocol to allow secure API authorization  in a simple and standard method from desktop and web applications.

一个典型的OAuth应用通常包括三种角色,分别是:

  • Consumer:消费方
  • Service Provider:服务提供者
  • User:用户

用户好理解,不必多言,消费方和服务提供者则需要解释一下,举例来说:假设我们做了一个SNS,它有一个功能,可以让会员把他们在Google上的联系人导入到SNS上,那么此时的消费方就是SNS,而服务提供者则是Google。

注:Google APIs支持OAuth

消费方如果想使用服务提供者的OAuth功能,通常需要先申请两样东西:

  • Consumer Key
  • Consumer Secret

当消费方生成签名的时候,会用到它们。

一个典型的OAuth流程通常如下图所示:

OAuth流程图

OAuth流程图

  • A:消费方请求Request Token
  • B:服务提供者授权Request Token
  • C:消费方定向用户到服务提供者
  • D:获得用户授权后,服务提供者定向用户到消费方
  • E:消费方请求Access Token
  • F:服务提供者授权Access Token
  • G:消费方访问受保护的资源

基本就是用Request Token换取Access Token的过程。这里需要注意的是,对服务提供者而言,Request Token和Access Token的生命周期不一样,通常,Request Token的生命周期很短,一般在一个小时以内,这样相对安全一些;而Access Token的生命周期很长,往往是无限,如此一来,消费方就可以把它保存起来,以后的操作就无需用户再授权了,即便用户修改账号密码,也不会受影响,当 然,用户可以废除消费方的授权。

有腿的OAuth

我们前面描述的OAuth,被称为三条腿的OAuth(3-Legged OAuth),这也是OAuth的标准版本。这里所谓的“三条腿”,指的是授权过程中涉及三步流程。不过有些情况下,不需要用户的参与,此时就产生了一个 变体,被称作两条腿的OAuth(2-Legged OAuth),两条腿的OAuth和三条腿的OAuth相比,因为没有用户的参与,所以在流程中就不会涉及用户授权的环节,而主要是通过Consumer Key和Consumer Secret来完成签名的,此时的Consumer Key和Consumer Secret基本等价于账号和密码的作用。

补充:关于腿的解释详见The OAuth Bible

OAuth简史

2007年12月4日发布了OAuth Core 1.0

此版本的协议存在严重的安全漏洞:OAuth Security Advisory: 2009.1,更详细的介绍可以参考:Explaining the OAuth Session Fixation Attack

2009年6月24日发布了OAuth Core 1.0 Revision A

此版本的协议修复了前一版本的安全漏洞,并成为RFC5849,我们现在使用的OAuth版本多半都是以此版本为基础。

OAuth的未来:OAuth 2.0 Working Draft,…

OAuth和OpenID的区别

OAuth关注的是authorization;而OpenID侧重的是authentication。从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别:

  • authorization: n. 授权,认可;批准,委任
  • authentication: n. 证明;鉴定;证实

OAuth关注的是授权,即:“用户能做什么”;而OpenID关注的是证明,即:“用户是谁”。

如果混淆了OAuth和OpenID的含义,后果很严重。以国内某网站开发的应用为例:它的功能是通过OAuth授权让新浪微博和豆瓣的用户使用各自的身份发表评论,如下图所示:

错误的把OAuth当做OpenID使用

错误的把OAuth当做OpenID使用

此类应用属于身份证明问题,本应该通过OpenID来实现,但因为错误的使用了OAuth,从而带来安全隐患:设想一下用户只是在网站上发表了评论 而已,但却赋予了网站随意操作自己私有数据的权利!这就好比:快递员送包裹,为了证明收件人的身份,原本你只要给他看一下身份证即可,可你却把防盗门钥匙 都给他了!Oh,My God!

收工!作为首尾呼应的结束语,请允许我套用蒲柏的话:『账号和账号的安全在黑暗中隐藏,上帝说:让OAuth去吧,于是一切都被照亮!』,不过这可不是墓志铭 :-)

补充:关于OAuth详细的介绍可以参考Beginner’s Guide to OAuth

分享到:
评论

相关推荐

    php-oauth一个简单的oauth实现

    php-oauth一个简单的oauth实现

    Java的oauth2.0 服务端与客户端的实现 (完整源码、demo)

    Java的oauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现,对照我的博客http://blog.csdn.net/jing12062011/article/details/78147306使用该源码。 下载项目压缩包,解压,里面两个maven项目:...

    spring-security-oauth2-2.3.5.RELEASE-API文档-中文版.zip

    赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...

    Spring Security oauth2

    #OAuth2-Defender ##主要技术 Maven Spring Boot Spring Security Spring Security OAuth2.0 MySQL ##修改数据库配置 修改defender-oauth2-authorization\src\main\resources\...

    springboot集成oauth2.0

    springboot 集成oauth2.0服务器,基于oauth2.0授权码形式集成

    springboot+oltu.oauth2搭建oauth2环境

    springboot和apache的开源项目org.apache.oltu.oauth2组合搭建的oauth2环境,一般的oauth配置下就可以用了,但是我这个项目,是用原理上讲如何搭建oauth2,哪个controller转发到哪个controller,为什么这样,都有...

    阮一峰_理解OAuth 2.01

    一、应用场景为了理解OAuth的适用场合,让我举一个假设的例子 二、名词定义在详细讲解OAuth 2.0之前,需要了解几个专用名词 三、OAuth的思路OAut

    OAuth2.0协议中文版.pdf

    OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用...

    oauth20源代码

    oauth20源代码 服务端与客户端

    Spring Security OAuth2.0学习笔记.zip

    Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring Security结构总览,认证流程和授权,中间涉及到哪些组件,这些...

    完整Oauth 2.0实现实例

    完整Oauth 2.0 代码实现,包含数据库脚本,使用说明,导入数据库脚本,修改数据库配置可直接运行。

    OAuth2资源集合(Oauth2 in Action,OAuth2.0 Cookbook,Getting Started with OAuth 2.0)

    包含 1.Getting Started with OAuth 2.0.pdf 2.Mastering OAuth 2.0.pdf 3.Oauth2 in Action.pdf 4.OAuth2.0 Cookbook.pdf

    oauth2.rar

    oauth2oauth2oauth2

    OAuth Server和OAuth Client(JAVA实现,eclipse环境)

    资源为在eclipse开发环境中使用Java搭建OAuth Server和OAuth Client 参考代码为http://code.google.com/p/oauth/ OAuth Server为遵守OAuth 1.0协议的OAuth认证服务器 OAuth Client分为Desktop版本和Webapp版本

    Spring security oauth源码

    从官网下载的oauth2实例sparklr2与tonr2

    oauth2-server, 一个 PHP OAuth 2.0服务器实现.zip

    oauth2-server, 一个 PHP OAuth 2.0服务器实现 PHP OAuth服务器一个 PHP OAuth 2.0服务器实现。 安装包可以以用 Composer 安装,也可以以通过直接修改 composer.json 或者使用 composer require 命令来安装。co

    jmeter 实现oauth1.0授权认证

    目前线上资源较少关于jmeter实现oauth1.0请求的方法,系统接口通过Oauth1.0方式授权登录,通过jmeter自带beanshell插件解决认证授权问题 资源附带了脚本代码和实现步骤

    OAuth 2.0 in Action

    OAuth 2.0 in Action OAuth 2.0 in Action OAuth 2.0 in Action OAuth 2.0 in Action OAuth 2.0 in Action

    yii2-oauth2-server, 用于实现OAuth2服务器的包装器( https.zip

    yii2-oauth2-server, 用于实现OAuth2服务器的包装器( https yii2-oauth2-server用于实现OAuth2服务器的包装器( https://github.com/bshaffer/oauth2-server-php 插件)安装安装这里扩展的首选方法是通过 Composer 。...

Global site tag (gtag.js) - Google Analytics