基于 OAuth 安全协议的 Java 应用编程1
原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-oauth/index.html
參考博客:http://www.cnblogs.com/wangkewei/archive/2011/01/14/1935858.html
OAuth 简单介绍
OAuth 是由 Blaine Cook、Chris Messina、Larry Halff 及 David Recordon 共同发起的,目的在于为 API 訪问授权提供一个安全、开放的标准。
基于 OAuth 认证授权具有下面特点:
- 安全。
OAuth 与别的授权方式不同之处在于:OAuth 的授权不会使消费方(Consumer)触及到用户的帐号信息(如username与password)。也是是说。消费方无需使用用户的username与password就能够申请获得该用户资源的授权。
- 开放。
不论什么消费方都能够使用 OAuth 认证服务,不论什么服务提供方 (Service Provider) 都能够实现自身的 OAuth 认证服务。
- 简单。
无论是消费方还是服务提供方,都非常easy于理解与使用。
- OAuth 的解决方式例如以下图所看到的。
如图 1 所看到的 OAuth 解决方式中用户、消费方及其服务提供方之间的三角关系:当用户须要 Consumer 为其提供某种服务时,该服务涉及到须要从服务提供方那里获取该用户的保护资源。OAuth 保证:仅仅有在用户显式授权的情况下(步骤 4)。消费方才干够获取该用户的资源。并用来服务于该用户。
从宏观层次来看。OAuth 按下面方式工作:
- 消费方与不同的服务提供方建立了关系。
- 消费方共享一个password短语或者是公钥给服务提供方,服务提供方使用该公钥来确认消费方的身份。
- 消费方依据服务提供方将用户重定向到登录页面。
- 该用户登录后告诉服务提供方该消费方訪问他的保护资源是没问题的
在了解 OAuth 认证流程之前,我们先来了解一下 OAuth 协议的一些基本术语定义:
- Consumer Key:消费方对于服务提供方的身份唯一标识。
- Consumer Secret:用来确认消费方对于 Consumer Key 的拥有关系。
- Request Token:获得用户授权的请求令牌,用于交换 Access Token。
- Access Token:用于获得用户在服务提供方的受保护资源。
- Token Secret:用来确认消费方对于令牌(Request Token 和 Access Token)的拥有关系。
OAuth 认证授权流程
- 消费方向 OAuth 服务提供方请求未授权的 Request Token。
- OAuth 服务提供方在验证了消费方的合法请求后,向其颁发未经用户授权的 Request Token 及其相相应的 Token Secret。
- 消费方使用得到的 Request Token,通过 URL 引导用户到服务提供方那里,这一步应该是浏览器的行为。接下来。用户能够通过输入在服务提供方的username / password信息。授权该请求。
一旦授权成功,转到下一步。
- 服务提供方通过 URL 引导用户又一次回到消费方那里。这一步也是浏览器的行为。
- 在获得授权的 Request Token 后,消费方使用授权的 Request Token 从服务提供方那里换取 Access Token。
- OAuth 服务提供方允许消费方的请求。并向其颁发 Access Token 及其相应的 Token Secret。
- 消费方使用上一步返回的 Access Token 訪问用户授权的资源。
总的来讲,在 OAuth 的技术体系里,服务提供方须要提供例如以下主要的功能:
- 第 1、实现三个 Service endpoints,即:提供用于获取未授权的 Request Token 服务地址,获取用户授权的 Request Token 服务地址,以及使用授权的 Request Token 换取 Access Token 的服务地址。
- 第 2、提供基于 Form 的用户认证,以便于用户能够登录服务提供方做出授权。
- 第 3、授权的管理,比方用户能够在不论什么时候撤销已经做出的授权。
而对于消费方而言,须要例如以下的基本功能:
- 第 1、从服务提供方获取 Customer Key/Customer Secret。
- 第 2、提供与服务提供方之间基于 HTTP 的通信机制,以换取相关的令牌。
在这里。Plaxo 承诺不会保存您在 Gmail 的password。
假设使用 OAuth 认证。情况是不同的,您不须要向站点 A(扮演 Consumer 角色)暴露您站点 B(扮演 Service Provider 角色)的username、password信息。比如。您登录 http://lab.madgex.com/oauth-net/googlecontacts/default.aspx 站点, 如图所看到的:
点击“Get my Google Contacts”,浏览器将会重定向到 Google。引导您登录 Google。如图
登录成功后,将会看到图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在您登录 Google。点击“Grant access”。授权 lab.madgex.com 后,lab.madgex.com 就能获得您在 Google 的联系人列表。
在上面的的样例中,站点 lab.madgex.com 扮演着 Consumer 的角色,而 Google 是 Service Provider,lab.madgex.com 使用基于 OAuth 的认证方式从 Google 获得联系人列表。
基于 OAuth 安全协议的 Java 应用编程1的更多相关文章
- 基于 OAuth 安全协议的 Java 应用编程
OAuth 简介 OAuth 是由 Blaine Cook.Chris Messina.Larry Halff 及 David Recordon 共同发起的,目的在于为 API 访问授权提供一个安全. ...
- 基于Socket的低层次Java网络编程
Socket通讯 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流 ...
- 基于TCP/IP协议的C++网络编程(API函数版)
源代码:http://download.csdn.net/detail/nuptboyzhb/4169959 基于TCP/IP协议的网络编程 定义变量——获得WINSOCK版本——加载WINSOCK库 ...
- 基于URL的高层次Java网络编程
一致资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址.通过URL我们可以访问Internet上的各种网络资源, ...
- Java 网络编程(二) 两类传输协议:TCP UDP
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...
- 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...
- Java网络编程和NIO详解9:基于NIO的网络编程框架Netty
Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introd ...
- java网络编程+通讯协议的理解
参考: http://blog.csdn.net/sunyc1990/article/details/50773014 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很 ...
- 基于连接的Java网络编程
实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...
随机推荐
- Python安装模块出错(ImportError: No module named setuptools)解决方法
原地址:http://www.cnblogs.com/BeginMan/archive/2013/05/28/3104928.html 在window平台下安装第三方模块时,出现这样的错误:
- NuGet学习笔记(1)——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- Form - CHECKBOX全选功能
FORM BUILDER开发,遇到这样一个需求: 添加一个CHECKBOX完成全选功能,红框为新添加的CHECKBOX(如图示) Try to use APP_RECORD.FOR_ALL_RECOR ...
- poj2761Feed the dogs(划分树-区间K值)
链接 这树着实不好理解啊 讲解http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html 对于找K值 右区间的确定不是太理解..先当 ...
- poj3373Changing Digits(dp)
链接 dfs倒着搜 返回的路径不能满足相同的数最多 借鉴了下别人的代码.. 先dp出来 再倒着标记一下 然后正回来一定可以满足了 dp保存的是最小的不相同数 #include <iostream ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- @Resource和@Autowired
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- Html——footer的使用
html部分 <div class="container"> <div class="body"></div> <di ...
- BrnShop开源网上商城第六讲:扩展视图功能
在正式讲解扩展视图功能以前,我们有必要把视图的工作原理简单说明下.任何一个视图都会被翻译成一个c#类,并保存到指定的位置,然后被编译.这也就是为什么能在视图中包含c#代码片段的原因.下面我们通过一个项 ...
- 使用Arcglobe 10与3dmax建立三维城市
转自:http://www.cnblogs.com/jinlun/p/3380307.html 随着国家大力推进数字城市的建设,三维城市的建设也是势在必行的.与传统二维地图相比,三维城市在立体层次.视 ...