OAuth 还是智威汤逊?使用哪一个?为什么?

OAuth or JWT? Which one to use and why?

我开始学习基于令牌的身份验证,我正在尝试学习如何在 Laravel 5 中实现它。我遇到了两种非常流行的技术来做这件事,但我很困惑,因为我对这两种技术都不熟悉。

This article at Medium says I should go with lucadegasperi/oauth2-server-laravel 从 Github 上的星星数量和引导我找到它的参考数量来看,我确信它是社区中非常受欢迎的软件包。这个应该可以帮助我实现 OAuth。

This other article at Scotch.io encourages me to use tymondesigns/jwt-auth 从 Github.

上的星数来看,这也是非常受欢迎的

此时我无法决定使用哪一个,主要是因为我是一名新手开发人员,而且我还没有使用过它们中的任何一个。

任何人都可以向我指出它们各自的优缺点以及我应该实施哪一个吗?我的项目类型是否也会决定我应该使用哪种类型?又如何?

此外,如果您争论我应该选择其中之一,您能否也指出有助于我从它们开始的好资源。当然,除了我自己提供的两个链接。

JWT 是一个简单的身份验证协议,Oauth 是一个身份验证框架。

有经验的开发人员大约需要一个月的时间才能完全理解和实施 Oauth。有经验的开发人员可以在大约一天的阅读规范后掌握 JWT 协议。所以基本上,它归结为您的特定用例。

如果您想要对 api 进行简单的无状态 http 身份验证,那么 JWT 就很好并且实施起来相对较快,即使对于新手开发人员也是如此。

一些 JWT 资源供您参考:

以及一个 Oauth 资源:

JSON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间安全地传输信息,作为一种JSON 对象。此信息可以被验证和信任,因为它是经过数字签名的。 JWT 可以使用秘密(使用 HMAC 算法)或使用 RSA 的 public/private 密钥对进行签名。

OAuth 2.0 是授权协议。 OAuth 2.0 取代了 2006 年创建的原始 OAuth 协议所做的工作。OAuth 2.0 侧重于简化客户端开发人员,同时为 Web 应用程序、桌面应用程序、手机和客厅设备提供特定的授权流程。此规范正在 IETF OAuth WG 内开发。

- OAuth 我们有不同类型的令牌。

1) WS-Security 令牌,尤其是 SAML 令牌

2) JWT 代币

3) 遗留代币

4) 自定义令牌

比较 JWT 和 OAuth2 时要了解的最重要的一点是,它们并不相似。甚至不兼容。

JWT 是一种身份验证协议 这意味着它是一组用于发布和验证签名访问令牌的严格说明。令牌包含应用程序用来限制用户访问权限的声明。

**OAuth2 是一个授权框架** 另一方面,OAuth2 是一个框架,认为是非常详细的指南,用于让用户和应用程序在私人和 public 设置中向其他应用程序授予特定权限。

几个好的链接:

JWT 代表 JSON 网络令牌。顾名思义,它是一种用于在双方之间以 JSON 形式传输安全数据的令牌。

另一方面,Oauth2 是一组规则或过程,通常称为框架,可帮助验证和授权两方传输安全数据。

下图将解释 oauth2 的工作原理:-

下面对图中的步骤进行更详细的解释:-

  1. 应用程序向用户请求访问服务资源的授权
  2. 如果用户授权请求,应用程序将收到授权
  3. 应用程序通过提供其自身身份的验证和授权许可从授权服务器 (API) 请求访问令牌
  4. 如果应用程序身份通过身份验证并且授权授予有效,则授权服务器(API)向应用程序颁发访问令牌。授权完成。
  5. 应用程序从资源服务器(API)请求资源并出示访问令牌进行身份验证
  6. 如果访问令牌有效,资源服务器 (API) 将资源提供给应用程序

JWT 和 OAuth2 完全不同,服务于不同的目的,但它们是兼容的,可以一起用于传输安全数据。

JWT 在 oauth2 的第 3、6 步发挥作用的地方

Update based on comments.

我们可以分别使用Oauth和JWT。在 Oauth2 中,我们可以使用其他令牌机制代替 JWT。同样,我们可以独立使用 JWT 来保护我们的 API,方法是使用私有秘密或 public/private 密钥对其进行签名。这样我们就可以在 APIs

之间传输身份验证声明