OAuth简介

OAuth是在不提供用户名和密码的情况之下,授权第三方应用访问Web资源的安全协议。

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

比如在FB上想要导入MSN好友,在没有OAuth时,可能需要用户向FB提供MSN的用户名和密码。

OAuth解决了这个信任问题。它使得用户不需要向FB提供MSN的用户名和密码的情况下,可以授权MSN将用户的好友名单提供给FB。

OAuth中的角色:

服务商(Server):用户使用服务的提供方,一般用来存消息、储照片、视频、联系人、文件等(比如Twitter、Sina等)。

用  户(Resource Owner):服务商的用户

消费方(Client):通常是网站,该网站想要访问用户存储在服务商那里的信息。

上面例子里面,Client是FB,Server是MSN,Resource Owner是用户。

另外一个实例:

Jane在f.com上有两张照片,她想要将这两张照片分享到b.com,这个过程如何实现?

Jane在b.com上选择要分享的两张照片.

在b.com的后台会创建一个临时凭证,稍后Jane将持此凭证前往f.com.

然后页面跳转到f.com的OAuth页面,并要求Jane登录。注意,这里是在f.com上登录。

登录成功后,f.com会询问Jane是否授权b.com访问Jane在f.com里面的私有照片。

如果Jane授权成功,f.com会将Jane带来的临时凭证标记为Jane已经授权,同时跳转回b.com,并带上临时凭证(Temporary Credentials),凭此,b.com知道它可以去获取Jane的照片了。

对于b.com来说,它首先通过Request Token去f.com来换取Access Token,然后就可以用Access Token访问资源了。Request Token只能用于获取用户的授权,Access Token才能用于访问用户的资源。

最终,Jane成功将照片从f.com分享到b.com上。

一个通用的流程:

1、用户访问Client网站,想对用户存放在Server的某些资源进行操作。

2、Client网站向服务商请求一个临时Token。

3、Server验证Client网站的身份后,授予一个临时Token。

4、Client网站获得临时令牌后,将用户导向至Server的授权页面请求用户授权,然后这个过程中将临时Token和Client网站的返回地址发送给Server。

5、用户在Server的授权页面上输入自己的用户名和密码,授权Client网站访问所相应的资源。

6、授权成功后,Server将用户导向Client网站的返回地址。

7、Client网站根据临时Token从Server那里获取访问Token。

8、Server根据Token和用户的授权情况授予Client网站访问Token。

9、Client网站使用获取到的访问Token访问存放在Server的对应的用户资源。

流程图如下

中小网站没有必要自己实现OAuth协议,可以使用一些比较成熟的库。具体的库可以查看:http://oauth.net/2/

参考:《白帽子讲web安全》

OAuth认证的更多相关文章

  1. OAuth认证原理及HTTP下的密码安全传输

    很多人都会问这样一个问题,我们在登录的时候,密码会不会泄露?随便进一个网站,登录时抓包分析,可以看到自己的密码都是明文传输的,在如此复杂的web环境下,我们没有百分的把握保证信息在传输过程中不被截获, ...

  2. HTTP下密码的安全传输、OAuth认证

    在复杂的web环境下,我们没有百分的把握保证信息在传输的过程中不被接货,那不是用明文如何告诉服务器自己的身份呢? 在一些高度通信安全的网络中,数据传输会使用HTTPS作为传输协议,但是通常情况下我们没 ...

  3. 拿nodejs快速搭建简单Oauth认证和restful API server攻略

    拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...

  4. 一步一步搭建 OAuth 认证服务器

    http://www.fising.cn/2011/03/%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E6%90%AD%E5%BB%BA-oauth-%E8%AE%A4% ...

  5. JAVA Oauth 认证服务器的搭建

    http://blog.csdn.net/binyao02123202/article/details/12204411 1.软件下载 Oauth服务端: http://code.google.com ...

  6. Oauth认证简介

    Oauth是什么: 1.Oauth是一种安全认证的协议: 2.Oauth为用户资源的授权提供了一个安全的.开放而又简易的标准: 3.Oauth的授权不会使第三方触及到用户的账号信息(用户名和密码). ...

  7. 新浪微博客户端开发之OAuth认证篇

    新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...

  8. 服务端API的OAuth认证实现

    http://stackoverflow.com/questions/12499602/body-joints-angle-using-kinect?rq=1 新浪微博跟update相关的api已经挂 ...

  9. Oauth认证的时候报错:timestamp_refused

    今天server大规模报错,大部分用户无法登陆,小部分能够登陆,非常是奇怪. 查看log.调试代码,发现问题是在oauth认证的时候出了问题,报 timestamp_refused. google了下 ...

  10. 豆瓣api之OAuth认证

    豆瓣api通过OAuth允许第三方应用访问用户数据,所以OAuth认证就是我们整个project的基础了. OAuth认证听起来挺神秘,其实挺简单的. 现在的大型网站的开放平台的认证几乎都是采用OAu ...

随机推荐

  1. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

  2. kali linux 安装nvidia

    开始安装之前需要说明一下几点: 1.安装闭源显卡驱动有一定风险,比如黑屏或者无法进入图形界面什么的.如果您很害怕折腾,而且不在Linux系统中玩开源游戏(比如Nexuiz)或看高清电影,默认的nouv ...

  3. C++引用详解

    引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引用,即别名. i ...

  4. Nginx-解读内置非默认模块 ngx_http_stub_status_module

    1.Background ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的 ...

  5. 将应用部署到Tomcat根目录的方法 去掉url里的项目名

    在"conf/Catalina/localhost"目录下增加新的文件"ROOT.xml"(注意大小写哦),文件内容如下: <?xml version=& ...

  6. 远程调试js注意事项

    1:使用host切换工具,先注释掉93服务器的地址,打开链接,点击高级选项,进去后登陆账号密码(如果不行重启浏览器): 2:进入后,增加93服务器上的host地址,重启浏览器,css样式生效: 3:使 ...

  7. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  8. Arrays数组的常用方法

    下面代码主要说明了Arrays数组的几个常用方法(红色字体) import java.util.Scanner;import java.util.Arrays;      public class T ...

  9. 【svn】svn 项目地址修改

    1.IDEA修改 确定OK. 2.TortoiseSVN修改 选择项目目录右键->TortoiseSVN->重新定位(Relocate),然后修改URL, 3.Mac OS或Linux客户 ...

  10. Javascript模式(第四章函数)------读书笔记

    一 背景 js函数的两个特点:1 函数是第一类对象(first-class object):2 函数可以提供作用域 1 函数是对象: 1 函数可以在运行时动态创建,还可以在程序执行过程中创建 2 可以 ...