OAuth详解之一:动机

本文基于《OAuth 2 in Action》第一章,探讨OAuth协议的动机。OAuth旨在避免共享资源拥有者的认证信息,通过为特定客户端生成有限权限的凭据进行资源访问,允许对授权进行撤销,并提供安全实现这一过程的协议。
摘要由CSDN通过智能技术生成

最近正在学习OAuth协议,看了《OAuth 2 in Action》这本书。本文是对该书第一章内容的小结。如果想看原汁原味的解读,请找这本书的原版读一读。第一章的核心内容就是在回答一个问题:为什么需要OAuth这个协议?

用一句话说,该协议提供了一种,在不欺骗资源拥有者的前提下,通过某种方式以资源拥有者的名义访问资源的方法。这种方式就是资源拥有者对访问者的 授权(authorization)。如图1.2(以下图片均来自该书)。
具体到应用场景,资源拥有者可以是一个有权访问和授权Web API的账户,而资源就是相应的Web API。资源访问者可以是API的使用者,比如一个浏览器。如果没有OAuth,那么浏览器需要拿到拥有者的认证信息,比如用户名、密码,session信息等,然后通过这个信息请求Web API的授权。如果资源和访问者在同一个安全域,上述方案比较容易实现,浏览器(访问者)只需要用当前登录用户(资源拥有者)的认证信息(以资源拥有者的名义)再去请求API(资源)即可。然而,如果API资源与访问者不在同一个域内,比如API由第三方提供,显然当前用户的的认证信息第三方资源是不认的,上述方案失效。这时访问者可以询问资源拥有者,你的新的认证信息是什么,比如用户(资源拥有者)需要告诉当前登录的浏览器(访问者),他在另一个服务(资源)的账号密码是什么。这样做的一个缺陷是,浏览器或者其他客户端为了持续访问资源,通常会保存服务的认证信息,一旦客户端遭到攻击,认证信息泄露,那么用户的资源就有危险,因此这是一个十分危险的行为。如图1.3。


以上两种方式有个共同点,就是客户端在扮演资源拥有者(登录用户)的角色(impersonating),资源在处理访问请求时,无法区分是 扮演者还是真正的 拥有者。为什么要做这个区分?就是为了 更细致的权限控制。授权的过程可以细化到允许某个访问者只读,而另一个访问者可以读写,甚至删除。如果不区分对所有访问着一视同仁,那么在上述场景中,攻击者可能对资源进行篡改和删除。另外,如果想终止授权,你只能改原来的登录密码。
还有一个方案,资源拥有者可以为各个客户端生成一个访问密码。这样虽然可以避免,拥有者将自己的登录密码共享,却需要额外维护这个访问密码,况且,访问密码与各个应用不是一一对应,如果要仅仅停止某个应用的授权无法做到。如图1.6。
基于上述讨论,我们需要的授权方案有一下特征:
  1. 不需要共享资源拥有者的认证信息。
  2. 针对特定客户端应用和资源拥有者生成一个新的凭据(credentials)用于资源访问(可以针对特定应用取消授权)。
  3. 可以访问权限可以是受限的(如仅允许读操作)。
  4. 实现某种协议来实现上述过程(如凭据的生成、分发)。



OAuth可以提供这样的方案。
在OAuth协议中,客户端作为资源拥有者的代理(delegate),访问受保护的资源。具体的过程如下,首先客户端向资源拥有者申请授权,就是想要成为这个访问代理。资源拥有者会到授权服务器上(authorization server 一个新角色)做认证,告诉授权服务器,资源是我的,我是可信任的。然后,资源拥有者可以选择是否授权给这个客户端,以及授予哪些权限给这个客户端,并告知授权服务器。客户端被授权后,就可以向授权服务器申请一个访问令牌(access token),拿到token后,就可以直接访问受保护的资源了。如图1.8。

注意,在这个过程中,资源拥有者的凭据并没有共享给任何客户端,因为它是直接到授权服务器做认证的,没有经过客户端。并且,一个有效的授权包含一个有效的资源拥有者(通过认证)信息、一个访问者信息以及要访问的资源信息,也就是说授权服务器需要明确的是, 把谁的资源的哪些访问权授予哪个访问者了

在实际应用中,授权服务器和资源服务器可能合二为一,只是以不同形式的服务存在。一个用户在某个客户端登录Web站点后,就使用登录信息进行资源的授权,随后客户端就使用token对资源服务器发起请求。从安全的角度讲,OAuth将一些安全性工作转移到授权服务器,客户端需要做的是保护好session和token等信息,至于用户的登录凭据、以及授权过程都在服务器端实现,这是合理的,因为客户端可以是成千上万并且种类多样的。有一点需要注意,OAuth是一个授权(authorization)协议,并不是一个认证(authentication)协议,它需要知道 某个用户授予了某客户端某种访问权限,但不需要知道这个 用户具体是谁,也就是某个用户信息对它来说没有特别意义。虽然授权服务器上集成了认证模块,但也不能说OAuth是认证协议。
以上就是OAuth协议的基本思路,其中的每个步骤都有很详细的和多样化的实现,以满足不同需求,计划在后续文章详细解读。 
如有理解有误指出,欢迎指教。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
This book is intended to be a comprehensive and thorough treatment of the OAuth 2.0 protocol and many of its surrounding technologies, including OpenID Connect and JOSE/JWT. We want you to come away from this book with a deep understanding of what OAuth can do, why it works the way that it does, and how to deploy it properly and securely in an unsafe internet. The target reader for this book is someone who’s probably used OAuth 2.0, or at least heard of it, but doesn’t really know how it works or why it works that way. Maybe you’ve even developed one or more OAuth 2.0 components, such as a client to talk to a specific API, but you’re curious about other kinds of clients, or other parts of the OAuth 2.0 ecosystem. Perhaps you wonder, “What’s the authorization server doing when you go ask for that authorization code, anyway?” Or perhaps you’re tasked with protecting an API and you want to know if OAuth 2.0 is really going to do the job, and if so, how are you supposed to manage that? Maybe in your day job you’re building a client, but you want to know what the protected resource does with that token you sent it. Or maybe you’re building and protecting an API, but you want to know what the authorization server you’re talking to does to get those tokens into the right place. We want you to understand what the tool, OAuth 2.0, is really good at and how you can wield it effectively. We’re going to assume you know the basics of how HTTP works, and at least understand the utility of encrypting connections using TLS, if not the intimate details of how it works. Our code is all in JavaScript, but this isn’t a book about JavaScript, and so we’ve done our best to explain the abstractions and functional- ity that the code itself represents so that you can apply it to your own platform and
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值