基于 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" ...
随机推荐
- Linux系统调用列表
转自Linux系统调用列表 一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtabl ...
- 在8086中,[ idata],[bx]表示内存单元时。可能是一个字节,也可能是一个字。
可能表示一个字节,也可能表示一个字.主要由指令中另一个计算对象决定.如al表示一个字节.ax就表示一个字. 这个区别主要体现在循环中,偏移地址的循环变量是加1还是加2,al是偏移地址加1,ax是偏移地 ...
- HDOJ 4893 Wow! Such Sequence!
题意是这样的,给定一个n个元素的数组,初始值为0,3种操作: 1 k d将第k个数增加d: 2 l r 询问区间l...r范围内数之和: 3 l r 表示将区间l...r内的数变成离他最近的斐波那契数 ...
- CodeChef A
问题是求出斐波那契数列的第n个,这里要用大数加法预处理,然后就可以了 代码: #include <iostream> #include <sstream> #include & ...
- ASP.NET 弹出对话框和页面之间传递值的经验总结
今天碰到一个弹出对话框(PopUp dialog)的问题, 因该是个傻瓜问题, 但是还是让我研究了半天, 总结了一些前人经验, 拿出来跟大家分享一下! 在ASP.Net中页面之间的传值方法有很多,但是 ...
- SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-004-Pizza例子的用户流程(flowExecutionKey、_eventId_phoneEntered、flowExecutionUrl )
一. 1. 2. 3.customer-flow.xml 自己定义customer,最后output <?xml version="1.0" encoding="U ...
- Android 风格化的 Toggle Buttons
Android到默认UI比iOS到默认UI在美观程度上还是有一定到差距的,我们希望能够美化UI,并且替换掉系统默认的UI风格,使得程序在使用这些UI的时候都默认使用我们自定义到UI.本文以Toggle ...
- MFC CVIew关闭时崩溃
记得看视频的时候老师说过 创建CView的时候,也就是创建视图的时候,不要使用 Cview m_view;这种方式 而是使用Cview * pView=new Cview() ...
- 【转】ubuntu 11.10(32位系统)下编译android源码
原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...
- GML、SVG、VML的比较
转自:http://www.cnblogs.com/3echo/archive/2009/02/19/1394399.html GML.SVG和VML都是基于XML的可用来描述矢量图形的标记语言,都是 ...