基于OAuth和基于令牌的身份验证之间有什么区别?

Cem*_*mre 54 authentication oauth access-token oauth-2.0 jwt

我认为OAuth基本上是基于令牌的身份验证规范,但大多数时候框架的行为就像它们之间存在差异一样.例如,如下图所示,Jhipster会询问是使用基于OAuth还是基于令牌的身份验证.

这些不一样吗?究竟有什么区别,因为它们的实现中都包含令牌?

在此输入图像描述

rde*_*ges 135

这是一个很好的问题 - 围绕令牌和OAuth存在很多混淆.

首先,当你提到OAuth时,你可能会提到OAuth2标准.这是OAuth协议的最新版本,也是大多数人在说"OAuth"时专门讨论的内容.

OAuth协议支持几种不同类型的身份验证和授权(准确地说是4).

其次,OAuth协议通过令牌验证用户.这里的想法是这样的:

不是让您的用户在每次请求时将他们的实际凭据发送到您的服务器(就像他们使用Basic Auth一样,用户将每个请求的用户名/密码发送到服务器),使用OAuth,您首先要交换用户凭据'token',然后根据此'令牌'对用户进行身份验证.

OAuth的想法是,通过要求用户通过网络不那么频繁地传递其机密凭证,可以发生更少的坏事.(无论如何,这是个主意.)

现在,这里是令牌发挥作用的地方:OAuth规范是围绕令牌的概念构建的,但是没有指明令牌是什么.

在最"一般"的意义上,令牌只是一个唯一标识用户的字符串.而已.

人们意识到了这一点,并开发了一种创建令牌的新标准,称为JSON Web令牌标准.该标准基本上提供了一组以非常特定的方式创建令牌的规则,这使得令牌对您来说更有用.

JWT让你做的事情如下:

  • 以加密方式签署令牌,以便您知道令牌未被用户篡改.
  • 加密令牌,因此无法以纯文本格式读取内容.
  • 以标准方式嵌入标记字符串的JSON数据INSIDE.

现在,在大多数情况下:开发社区中的每个人都同意,如果您使用任何类型的OAuth,那么您使用的令牌应该是JSON Web令牌.

==========

好!现在我们已经介绍了背景故事,让我回答你的问题.

您在上面做出的选择是您是否要为身份验证/授权启用完整的OAuth2规范(这非常复杂),或者您是否只想要一些基本的"令牌身份验证".

由于OAuth协议提供了多种不同的方式来以STANDARDS COMPLIANT方式进行身份验证,因此它为大多数身份验证系统增加了很多复杂性.

因此,许多框架提供了OAuth2密码授权流程的"愚蠢"版本,这实际上是一种简单的方法,其中:

  • 用户通过/ login这样的URL将他们的用户名/密码发送到您的服务器.
  • 您的服务器为用户生成JWT令牌.
  • 您的服务器将该令牌返回给用户.
  • 用户将此令牌存储在其cookie,移动设备或可能的API服务器中,在那里他们使用它来发出请求.

再说一遍:上面的流程不符合OAuth,但是STILL使用令牌的版本稍微简单一些.

这里的要点是令牌(JWT)通常很有用,并且不需要与OAuth流配对.

我意识到这是一面文字,但希望它更深入地回答你的问题=)

  • 好的答案,但是应该指出,OAuth2本身不能用于对用户进行身份验证(除非API端点可用,否则客户端对用户一无所知)。必须实现OpenID Connect才能执行基于OAuth2的身份验证 (3认同)
  • 这是对的。我没有详细说明,因为我不想过度混淆 OP。但你是 100% 正确的。 (3认同)
  • @hattenn这是一个艺术(https://oauth.net/articles/authentication/),它提供了一些关于为什么它不符合oAuth的细节: (2认同)
  • @Mikz您不正确。这取决于您使用的OAuth类型。赠款类型不同,使用方式也不同。由于OP提出的问题,我提供了有关客户凭证授予类型的详细信息,这是他的问题所指的类型。显然还有其他模式,但是所有模式都涉及IDP的凭据。 (2认同)

Nit*_*hin 7

OAuth 是授权而非身份验证的规范

OAuth 2.0 是一个授权规范,但不是身份验证规范。RFC 6749,3.1 。授权端点明确表示如下:

授权端点用于与资源所有者交互并获取授权。授权服务器必须首先验证资源所有者的身份。授权服务器验证资源所有者的方式(例如,用户名和密码登录、会话cookie)超出了本规范的范围

仅当您想要向您的 api 授予对第三方服务的访问权限时,才使用 OAuth。即使您使用 OAuth,您也需要某种身份验证(基于令牌或基于会话等)来验证使用情况。OAuth 不是为身份验证而设计的。

看到这个问题


lip*_*nen 5

从安全Web服务请求资源时,可以在呼叫中提供身份验证令牌.令牌行为充当用于访问资源的"密码".

OAuth只是特定类型的基于令牌的身份验证方法.