OAuth(2)的理解
1.OAuth概念?
OAuth是Open Authorization的简写,OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
官方网站的首页简介: An open protocol to allow secure API authorization in a simple and standard method from web, mobile and desktop applications.2.OAuth2与OAuth的不同之处?
OAuth2能更好地支持不是基于浏览器的应用。对于不是基于浏览器的应用程序,这是对OAuth的主要挑战。 OAuth2.0不再需要客户端应用程序拥有密钥。 OAuth2.0的签名流程简单得多。没有更多的特殊解析,排序,或编码。 OAuth2.0的访问令牌是“短命”的。通常情况下,OAuth1.0的访问令牌可以存储一年或一年以上。 OAuth2.0使得负责处理的OAuth请求的服务器和处理用户的授权服务器之间的角色有一个干净的分离。3.简单理解
我们有一个资源服务器,资源服务器中有一系列的用户数据。
现在有一个应用想要获取我们的用户数据。
那么最简单的方法就是我们开发一个API。
可是某天来了个恶意应用,或者是我们不想给它数据的应用,我们就会造成数据的泄漏。
所以我们就需要对第三方的应用进行校验,比如最原始的方法是使用IP地址,如果是不认识的IP地址就不给他资源。
可是这种方案有两个严重的缺点:
1、当客户应用换了IP地址之后,我们也要同时维护更换IP地址。
2、当客户应用是分布式部署很多份的时候,我们就要为同一个用户维护很多份IP地址。
3、ip是可以伪装的。
这样无疑是繁琐麻烦、难以维护的。
所以一般业界的解决方案是给予客户应用一个“出入证”——专业称为访问令牌(Access Token)。如果来访问的客户应用带有合法的访问令牌,则可以给他数据,否则便拒绝。
那么Access Token哪里来的呢?我们一般是由一个授权服务器颁发的。每个允许其访问资源的客户应用都先在我们的系统中注册一个appkey,然后每次用这个appkey向我们的授权服务器申请Access Token。这样不论客户应用换不换ip、有多少ip,只要客户应用的appkey是唯一不变的就不用做任何修改,也不用担心ip伪装的问题。
到此为止我们其实还面临着一个问题,那就是当我们获取用户数据的时候,虽然我们允许第三方的客户应用获取用户数据,用户本人却不一定允许。比如,用户在我们系统里存储了图片、文档、视频等数据,用户只允许第三方应用获取他的文档,而不允许第三方应用获取他的图片和视频。所以在我们颁发给客户应用相关权限的Access Token的时候,需要经过用户的同意。
OAuth2.0本质上就是将这里的客户应用向授权服务器请求令牌与授权服务器颁发令牌的过程标准化了,根据这样一套标准与解决方案,我们就可以安全的让第三方应用访问存储在我们服务器上的用户数据了。