如何理解授权框架OAuth 2.0

译文
开发 前端
OAuth 2.0是一个极其丰富的授权框架,在当今市场上有多种实现。

​译者 | 李睿

审校 | 孙淑娟

在传统的客户端-服务器身份验证模型中,资源所有者与客户端共享其凭据,以便客户端可以在必要时访问其资源。客户端通过将资源所有者的凭据传递给资源服务器来做到这一点,并且资源服务器在提供对受保护资源的访问之前对其进行验证。这似乎很简单,对吧?  

但这个模型有很多问题,下面列出了其中一些问题:  

  • 客户端需要存储资源所有者的凭据以备将来使用。  
  • 如果资源所有者有多个客户端,则需要将相同的凭据分发给所有客户端。  
  • 资源所有者不能轻易撤消一个客户端的访问权限,因为它将要求其所有客户端使用资源所有者的新凭据来更新其数据库。
  • 如果一个客户端的数据库被泄露(因此资源所有者的凭据丢失),它会影响所有客户端。  
  • 没有简单的方法将客户端限制为资源所有者的一个资源子集,从而给他们提供过于广泛的访问权限。  

OAuth 2.0框架通过引入一个授权层来解决这些问题,该层消除了客户端与资源所有者拥有相同凭据的需要,而是允许他们使用访问令牌访问资源所有者的资源。

例如,最终用户(资源所有者)可以授予文档打印服务(客户端)访问其存储在文档服务器(资源服务器)中的文档(资源)的权限,而无需与文档打印服务共享其凭据。最终用户无需共享他们的凭据,而是可以通过与同样受文档打印服务信任的另一方(授权服务器)确认来批准客户端的文档访问请求。作为回报,授权服务器与文档打印服务共享访问令牌,以访问文档服务器中的最终用户文档。  

OAuth角色  

(1)资源所有者——拥有资源的实体。它能够授予对资源的访问权限。  

(2)资源服务器——托管受保护资源的实体。它能够拒绝或允许访问资源所有者的受保护资源。  

(3)客户——寻求访问(并作用于)受保护资源的实体。  

(4)授权服务器-协调认证和授权的实体。  

协议流  

A.客户请求资源所有者授予对各种资源的访问权限。客户端或者直接向资源所有者询问(如上所示),或者使用授权服务器作为中介。  

B.资源所有者通过返回称为授权许可的内容来响应。资源可以选择使用四种不同的授权许可类型之一或扩展授权类型进行响应。  

C.然后使用这一授权向授权服务器请求访问令牌。  

D.授权服务器验证授权,如果有效,则使用访问令牌(以及可选的刷新令牌)进行响应。  

E.客户端使用这一访问令牌向资源服务器请求资源。  

F.资源服务器验证令牌,如果有效,则为请求提供服务。  

授权许可   

这是一个凭据,表示提供给客户端访问其受保护资源的资源所有者的授权。如前所述,这与授权服务器共享以获取访问令牌作为交换。有四种授权许可类型:  

(1)授权码  

授权服务器是客户端和资源所有者之间的中介。客户端不会直接从资源所有者那里寻求授权,而是将资源所有者重定向到授权服务器,在此对资源所有者进行身份验证。在成功验证之后,资源所有者将与授权码一起重定向到客户端。  

这种授权类型有一些优点。  

  • 资源所有者的凭据永远不会与客户端共享,因为资源所有者由授权服务器进行身份验证。 
  • 访问令牌直接传输给客户端,无需通过任何一方,包括资源所有者。

(2)隐式授权

在这种授权类型中,没有像授权码这样的中间凭据。这意味着,一旦资源所有者通过授权服务器的身份验证,访问令牌就会立即可供客户端使用。这肯定比授权码授予类型快,但具有安全隐患(例如可能将访问令牌暴露给资源所有者或其他有权访问资源所有者的用户代理的应用程序)。当授权的授权类型可用时,不建议使用此授权类型。

 (3)资源所有者密码凭据  

在这种授权类型中,客户端使用资源所有者的凭据来获取第一次的访问令牌。一旦访问令牌可用于后续资源请求,就使用访问令牌。这消除了在客户端存储资源所有者凭据的需要。这在资源所有者与客户端有信任关系的情况下很有用。当授权的授权类型可用时,不建议使用此授权类型。  

(4)客户凭据  

这种授权类型用于客户端控制资源或他们也是资源所有者的情况。在这种情况下,客户端的凭据(预先与授权服务器共享)被用作授权授予来获取访问令牌。  

还有一种扩展授权类型,它是一种可扩展机制,可以创建更多授权类型。它超出了本文的范围。  

访问令牌  

访问令牌是用于访问由资源服务器托管的资源所有者的受保护资源的凭据。它是一个简单的字符串,包含安全且可验证的关键授权信息。这还包含所请求资源的范围和访问时间,这可以由资源服务器或授权服务器强制执行。在通常情况下,这些令牌是经过签名的,这也有助于资源服务器验证客户端的身份。  

对于每个资源请求,访问令牌与其他请求属性一起发送到资源服务器。这一令牌的结构是特定于实现的,不受OAuth 2.0规范的规定。

刷新令牌  

这是另一个凭据,当目前的访问令牌过期或无效时,客户端使用该凭据从授权服务器获取访问令牌。授权服务器可以自行决定是否发出刷新令牌。

OAuth 2.0是一个极其丰富的授权框架,在当今市场上有多种实现。它已被证明是安全的,并且经受住了时间的考验,这从最近在许多组织中的采用中可以看出。在未来的教程中,将通过一些工作示例深入研究这一框架。

原文标题:Understanding OAuth 2.0​,作者:Santanu Baruah​

责任编辑:华轩 来源: 51CTO
相关推荐

2021-07-12 07:08:53

OAuth 2.0授权协议

2021-09-17 09:00:00

安全身份认证OAuth 2.0

2020-07-08 07:45:44

OAuth2.0授权

2020-11-12 09:55:02

OAuth2

2021-05-19 07:50:09

SpringOAuth2.0授权

2021-08-02 06:49:46

OIDC认证协议

2019-11-15 09:26:36

OAuthWeb系统

2010-02-01 10:54:37

C++框架

2021-11-15 13:58:00

服务器配置授权

2012-11-07 10:01:52

组件技术OAuth授权登陆

2009-09-23 10:14:22

Hibernate

2020-06-11 07:00:00

OAuth 2.0会话管理应用安全

2015-03-21 06:41:50

oauth2.0监控宝

2022-03-16 00:07:55

OAuth2授权框架

2021-11-19 06:50:17

OAuth协议授权

2023-09-28 00:09:04

NIST网络安全

2024-03-20 10:53:15

2013-04-07 10:54:53

RubyRuby2.0

2011-11-16 13:14:02

Sencha TouciOS本地应用

2015-12-18 10:14:08

Angular框架时代
点赞
收藏

51CTO技术栈公众号