【问题标题】:OAuth or JWT? Which one to use and why?OAuth 还是 JWT?使用哪一个,为什么?
【发布时间】:2016-01-03 01:32:35
【问题描述】:

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

This article at Medium 说我应该选择lucadegasperi/oauth2-server-laravel,从 Github 上的明星数量和引我使用它的参考数量来看,我确信它在社区中非常受欢迎。这个应该可以帮助我实现 OAuth。

This other article at Scotch.io 鼓励我使用tymondesigns/jwt-auth,从 Github 上的星星数量来看,它也很受欢迎。

此时我犹豫不决,主要是因为我是一名新手开发人员,而且我还没有与他们中的任何一个合作过。

谁能向我指出它们各自的优缺点以及我应该实施哪一个?我的项目类型是否也会决定我应该使用哪种类型?怎么做?

此外,如果您提出我应该选择一个而不是另一个的论点,您能否指出可以帮助我从它们开始的好的资源。当然,除了我自己提供的两个链接。

【问题讨论】:

    标签: laravel authentication oauth-2.0 laravel-5 jwt


    【解决方案1】:

    JWT 是一个简单的认证协议,Oauth 是一个认证框架。

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

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

    为您提供一些 JWT 资源:

    还有一个 Oauth 资源:

    【讨论】:

    • 感谢您为我解决这个问题。感谢您清楚地说明设置其中任何一个需要多少时间。我想我会坚持使用 JWT。干杯。 :)
    • “Oauth 是一个身份验证框架。”真的吗?它只进行授权,即控制对资源的访问。您必须添加另一种机制来提供身份验证。
    • Oauth2 是一个授权框架或协议。 JWT 还可以用于授权或信息交换。
    • 对于一个简单的api,使用同一个api作为访问令牌的授予者(登录时)有什么风险?
    【解决方案2】:

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

    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 是一个框架,考虑非常详细的指南,用于让用户和应用程序在私有和公共设置中授权给其他应用程序的特定权限。

    很少有好的链接:

    【讨论】:

    • OAuth2 不是身份验证协议。它是一个授权协议/框架。
    【解决方案3】:

    JWT 代表 JSON Web Token。顾名思义,它是一种用于在两方之间以 JSON 格式传输安全数据的令牌。

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

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

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

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

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

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

    基于 cmets 更新。

    我们可以分别使用 Oauth 和 JWT。在 Oauth2 中,我们可以使用其他令牌机制来代替 JWT。同样,我们可以通过使用私有密钥或公钥/私钥对 API 进行签名来独立使用 JWT 来保护我们的 API。这样我们就可以跨 API 传输身份验证声明

    【讨论】:

    • 这解释了技术,但不回答所提出的具体问题
    • JWT 和 OAuth2 完全不同,服务不同的目的,但它们是兼容的,可以一起使用,当然,它们是可分离的。
    猜你喜欢
    • 2017-01-05
    • 2021-08-10
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2021-06-13
    • 2013-04-10
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多