【问题标题】:Basic Auth + JWT vs Oauth2基本身份验证 + JWT 与 Oauth2
【发布时间】:2021-01-31 13:20:16
【问题描述】:

我有一个由微服务组成的应用程序:网关 + 发现服务 + 微服务。 现在,我正在为 zuul 网关实现 Spring 安全性,因此在成功登录后,它会返回一个带有授权的 JWT。因此网关充当授权和身份验证服务器。我认为这样生态系统是安全的,因为网关不允许任何未经授权的端点访问。

我正在应用此流程,因为我不想单独配置每个微服务。这是一个单一的安全入口点。

现在,我已经阅读了有关 Oauth 的信息并在演示应用程序中进行了实现,但我不正确理解 Ouath2 是否会使我的应用程序更容易或会增加不必要的复杂性。我读到 Spring Auth Server 尚未实现,所以我认为我需要使用 Okta 或 Keycloack。

实施 Oauth2 与 Gateway + Basic Auth + JWT 有什么优势?

作为补充说明: 该应用由具有不同 UI 的不同应用组成,我将区分用户可以通过其组访问哪些产品。

非常感谢您的建议。

【问题讨论】:

    标签: java spring-boot security spring-security


    【解决方案1】:

    如果我理解正确,您使用的是没有 OAuth2 的 JWT?

    实施 Oauth2 与 Gateway + Basic 相比有何优势 身份验证 + JWT?

    OAuth2 是一种访问委托协议,支持您的应用程序中的特定流程。 OAuth2 标准化了用户或其他 Web 应用程序如何获取您的令牌(例如 JWT)。因此,在您的情况下,可以理解为以标准化方式生成 JWT 令牌。

    这样做有什么好处吗?这取决于:)

    拥有 OAuth2 授权服务器可以让您将一些第 3 方应用程序与您的安全性集成(仅当它们支持 OAuth2/OpenId 时)。如果是(或将是)您的情况,那么您应该考虑在您的应用程序中使用 OAuth2。

    您当前的设置(基本身份验证 + JWT)可能存在一些安全问题。如果我理解正确,您是在 Authorization 标头中发送用户凭据(用户名 + 密码)并将它们交换为 JWT?如果用户使用公共客户端(带有登录表单的网页)登录,那么您只是使用 OAuth2 + 密码授予类型流程,这被认为是严重的安全问题 (https://www.scottbrady91.com/OAuth/Why-the-Resource-Owner-Password-Credentials-Grant-Type-is-not-Authentication-nor-Suitable-for-Modern-Applications)

    您应该问的问题是使用基本身份验证的潜在问题是什么以及如何通过 OAuth2 解决这些问题。

    现在,我已经阅读了 Oauth 并在演示中进行了实现 应用程序,但我不正确理解 Ouath2 是否会使我的应用程序更容易 或者会增加不必要的复杂性。我读到 Spring Auth Server 是 还没有实现,所以我想我需要使用 Okta 或 Keycloack。

    您不必使用 Okta 或 Keycloak。您可以在 Spring (https://docs.spring.io/spring-security-oauth2-boot/docs/current/reference/html5/) 中创建自己的授权服务器。这可以被视为您的微服务架构中负责授权的另一个服务(例如颁发令牌)。或者,您可以添加用户管理 API(管理系统其他部分的权限)并从网关中删除它们。

    【讨论】:

    • 感谢您的回答。最后,我决定通过 JSON 发送凭据。哦,我明白了,实际上我有点遵循密码授予的流程。在网络应用程序中,我只允许访问使用用户名 + 密码创建帐户的注册用户。我不允许访问像 facebook 这样的第三方帐户,这就是为什么最后我不明白 oauth2 是如何适应的。
    【解决方案2】:

    在微服务架构中,我强烈建议您拥有一个单独的授权微服务,以执行授权任务。

    关于 OAuth 与 JWT 的问题。 OAuth2 是一种协议,它定义了如何使用身份验证令牌的标准。而 JWT 实际上是一种令牌格式。您也可以在 OAuth2 中使用 JWT 或更标准的 SAML2 令牌格式

    【讨论】:

    • 如前所述,我在比较 Basic Auth + JWT,我知道 JWT 只是一个令牌。我需要知道是否有优势,是否应该实施 ouath2
    【解决方案3】:

    如果不使用 JWT,当你的系统变大时,越来越多的 Auth 检查需要由 Auth Server 处理。 使用 JWT,您可以在令牌的有效负载中导出用户详细信息

    【讨论】:

    • 是的,我将使用 JWT 进行授权。用户将进行一次身份验证,然后将为每个后续请求传递令牌。我的问题是,如果 Ouath2 对这种架构有任何优势
    猜你喜欢
    • 2018-11-29
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2016-04-24
    • 2017-09-18
    • 2020-07-19
    相关资源
    最近更新 更多