当前位置: Coin163 >>

OAuth 2/1介绍:原理、认证流程

2013-12-18 | 所属分类:OAuth1 OAuth2 原理 认证流程
 

1.       OAuth 概述

1.1.   What is OAuth

OAuth 全称 Open Authorization 开放授权( OAuth is an open standard for authorization ),是一个安全相关的协议,它为桌面程序或者基于 B/S web 应用提供了一种简单的,标准的方式去访问需要用户授权的 API 服务。即允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息,而这种授权无需将用户提供的用户名和密码提供给该第三方网站。

OAuth 允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。

 

1.2.   OAuth 认证授权主要特点

OAUTH 认证授权主要特点如下:

Ø   简单:不管是 OAUTH 服务提供者还是应用开发者,都很容易于理解与使用;

Ø   安全:没有涉及到用户密钥等信息,更安全更灵活;

Ø   开放:任何服务提供商都可以实现 OAUTH ,任何软件开发商都可以使用 OAUTH

 

1.3.   OAuth 发展历史

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

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

3、   2010 4 月, OAuth 1.0 的终于在 IETF 发布了,协议编号 RFC 5849

4、   OAuth 2.0 的草案是在 2011 5 月初在 IETF 发布的。

5、   2012 10 月, OAuth 2.0 作为 rfc6749 发布。

 

1.4.   主要角色

典型的 OAuth 应用通常包含三种角色:

1、   Service Provider 服务提供方(服务商)

用户使用服务的提供方,一般用来存消息、照片、视频、联系人、文件等 ( 比如 Twitter 、新浪微博等 )

2、   Consumer 消费方(第三方)

通常是网站,该网站想要访问用户存储在服务商那里的信息。

3、   User 用户

服务商的用户

 

简单图示:

  oauth

 

角色关系举例如下:

比如某个提供照片打印服务的网站,用户想在那里打印自己存在服务商那里的网络相册。

2.       OAuth 2.0 认证流程

OAuth2.0 的主要处理流程,可分为以下四个步骤,如下图:

oauth_2

详细说明如下:

第一步:得到授权码 code

首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的 Auth code ,这里注意的是 code 只有 10 分钟的有效期,对于安全考虑,相对于 OAuth 1.0 省了一步获取临时的 Token ,并且有效期也进行了控制,比 1.0 认证简化了很多,并安全一些;

第二步:获取 access token

得到授权 code 后,就是请求 access token ,通过图示 Request access url ,生成得到数据 Token

第三步:通过 access token, 获取 OpenID

通过 Access Token 请求 OpenID OpenID 是用户在此平台的唯一标识,通过图示 Request info url 请求,然后得到 OpenID

第四步:通过 access token OpenID 调用 API, 获取用户授权信息

通过第二步得到的数据 Token 、第三步得到的 OpenID 及相关 API ,进行请求,获取用户授权资源信息。

 

3.       OAuth 1.0 认证流程

OAuth 1 认证流程图如下:

oauth-1

说明:

§   A :消费方请求 Request Token ( 请求令牌 )

§   B :服务提供者授权 Request Token

§   C :消费方定向用户到服务提供者

§   D :获得用户授权后,服务提供者定向用户到消费方

§   E :消费方请求 Access Token ( 访问令牌 )

§   F :服务提供者授权 Access Token

§   G :消费方访问受保护的资源

简单来说就是用 Request Token 换取 Access Token 的过程。

 

 

4.       OAuth OpenID 的区别

OAuth 关注的是 authorization( 授权 ) ;而 OpenID 侧重的是 authentication (认证)。

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

举例说明 :

oauth-3

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

 

5.       参考资料

1、   http://en.wikipedia.org/wiki/OAuth#References

2、   http://kb.cnblogs.com/page/189153/

关于Coin163网站地图

Copyright 2012-2013 Coin163.com ( Coin163 ) All Rights Reserved