【问题标题】:Should I use OAuth or JWT?我应该使用 OAuth 还是 JWT?
【发布时间】:2017-01-05 22:12:34
【问题描述】:

我正在为现有产品构建 REST 服务。现在要验证这些,需要一些机制。为了给出规范,我有一个存储 userid 和 password 的数据库。我必须使用这些凭据进行身份验证。

在上面我应该使用 OAuth 还是 JWT?我更喜欢使用 JWT 先生成令牌,然后在每个请求中传递令牌。

另外,据我了解,当您有多个消费者(例如使用 Facebook 登录的游戏/应用程序)时,应该使用 OAuth。就我而言,我没有多个消费者。

请指教

【问题讨论】:

    标签: security oauth jwt


    【解决方案1】:

    虽然 OAuth 确实是一个授权框架,但它确实有助于 JWT。 JWT 是一个令牌规范,这意味着您管理和发布令牌的方式在很大程度上是未定义的。例如,当您的令牌到期时,您是否希望您的用户突然退出?默认情况下,如果您使用具有特定持续时间的令牌,则在您检查过期令牌时会发生这种情况,您应该这样做。

    OAuth 身份验证服务器可以用于在 JWT 中发布访问令牌和刷新令牌。每个请求都会包含访问令牌,当访问令牌过期或即将过期时,可以使用刷新令牌获取新的访问令牌。当考虑到可能需要撤销用户对您的应用程序的访问权限时,这很有用。如果您设置较短的访问令牌寿命,那么您将能够通过删除其刷新令牌来更快地撤消访问权限。

    这些技术是不同的,不能直接比较,因为它们解决了不同的问题并用于不同的用途。

    【讨论】:

    • 谢谢@blur0224,所以在我的情况下,我应该使用 OAuth 对用户进行身份验证吗?正如您提到的 OAuth 是授权框架,那么我需要为我的用例实现整个 OAuth 框架还是有其他替代方案?
    • 是的,OAuth 服务器可以根据数据库验证用户凭据并发出令牌。 OAuth2 有一个授权服务器,可用于实现发布和刷新 JWT 令牌的工作流程。您可以只实现 JWT,然后添加 OAuth2 身份验证服务器以根据您的需要改进/扩展授权。
    • 如果我必须根据存储在数据库中的凭据对用户进行身份验证,我仍然感到困惑,为什么我应该实施 OAuth。我在验证用户凭据后生成 JWT 令牌,然后用户可以在每个请求中使用这个令牌,直到它过期。如果我在这里遗漏任何东西,请纠正我..
    • 澄清一下,我是说 OAuth 工作流程的一部分可能是发出访问和刷新 JWT 令牌,其中可能包括针对数据库的身份验证。此后,JWT 将用于每个请求,直到它过期。然后可以使用刷新令牌来获取新的访问令牌。在这种情况下,OAuth 提供了刷新令牌所需的工作流程。如果您不希望这种行为,您可以在身份验证后使用标准库发布您自己的 JWT 令牌。
    • 感谢 blur0224 的输入。为了重新构建我的问题,我的应用程序没有任何 OAuth 提供程序。由于我的应用程序是独立的,我不确定如何实现 OAuth 机制,我只需要一种安全的方式来使用 REST 调用我的应用程序功能。此外,如果我实现 OAuth,我将如何生成 clientId 和 clientSecret。我需要对它们进行硬编码吗?
    猜你喜欢
    • 2017-06-24
    • 2021-06-13
    • 2019-06-30
    • 1970-01-01
    • 2020-03-15
    • 2018-09-05
    • 2016-01-03
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多