基于 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" ...
随机推荐
- 自己写loader
http://www.cnblogs.com/lynxcat/archive/2013/03/08/2950373.html http://addyosmani.com/blog/building-a ...
- static和const
转自说出static和const关键字尽可能多的作用 static关键字至少有下列n个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次 ...
- javascript技巧合集
转http://www.blogjava.net/zhaochengming/archive/2010/04/09/317837.html http://www.cnblogs.com/fxgachi ...
- php数组遍历 使用while循环
while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...
- SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-001- 配置SpringFlow(flow-executor、flow-registry、FlowHandlerMapping、FlowHandlerAdapter)
一. 1.Wiring a flow executor <flow:flow-executor id="flowExecutor" /> Although the fl ...
- 让动画不再僵硬:Facebook Rebound Android动画库介绍
introduction official site:http://facebook.github.io/reboundgithub : https://github.com/facebook/reb ...
- Form.KeyPreview 属性2
在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息. 当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响 ...
- 【HDOJ】2295 Radar
DLX+二分. /* 2295 */ #include <iostream> #include <string> #include <map> #include & ...
- 【HDOJ】1042 N!
肯定是大叔,本来以为用加法做乘法,后来想想这样麻烦,还是可以使用乘法的,按位乘,ov可以看成不止一位,程序如下所示: #include <stdio.h> #define MAX 4000 ...
- oracle的一种字符串处理机制。
orcale会把空字符串当成Null进行存储,sqlserver直接存储空字符串