OAuth是什么?
OAuth是Open Authorization(开放授权)的简写,是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
OAuth是OpenID的一个补充,但是完全不同的服务。
要更形象的理解什么是OAuth,可以看如下的一个实际的举例:
如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题。 豪车一般配备两种钥匙:主钥匙和泊车钥匙。当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生去处理。与主钥匙相比,这种泊车钥匙的使用功 能是受限制的:它只能启动发动机并让车行驶一段有限的距离,可以锁车,但无法打开后备箱,无法使用车内其他设备。这里就体现了一种简单的“开放授权”思 想:通过一把泊车钥匙,车主便能将汽车的部分使用功能(如启动发动机、行驶一段有限的距离)授权给服务生。
(以上摘自网络)
这就是授权。看完上面应该对什么是OAuth应该有一个初步的了解了,但是要应用的开发中这些东西根本没什么作用?如果想了解更多这个开放标准的话,你可以去官网,也可以看RFC6749,这都是纯粹的理论。
OAuth是干什么的?
了解了OAuth是什么了?OAuth是干什么的,也就显而易见的了,就是为了将自己的资源以有使用权限的方式开放出去。
为什么会有OAuth?
为什么会要OAuth?因为OAuth能干只有他自己能干的事?所以产生了它。
OAuth1 和OAuth2
简而言之,OAuth2是OAuth1的第二版本,但是OAuth2更加简单,本文讲的也都是OAuth2。可以参看wikipedia
OAuth2的Java实现
OAuth2各种平台的实现都有,我现在只是看Java的实现,Java的实现的有如下几个版本:
- Spring Security for OAuth
- Apache Oltu
- Apis Authorization Server (v2-31)
- Restlet Framework (draft 30)
- Apache CXF
本教程将学习的是Spring Security for OAuth。