java - 基本身份验证 + JWT 与 Oauth2

标签 java spring-boot security spring-security

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

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

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

与 Gateway + Basic Auth + JWT 相比,实现 Oauth2 有什么优势?

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

非常感谢您的建议。

最佳答案

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

What would be the advantage of implementing Oauth2 vs Gateway + Basic Auth + JWT?

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

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

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

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

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

And now, I've read about Oauth and made an implementation in a demo app but I dont understand correctly if Ouath2 will make easier my app or will add unnecesary complexity. I read that Spring Auth Server is not yet implemented so I think I would need to use Okta or Keycloack.

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

关于java - 基本身份验证 + JWT 与 Oauth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64398982/

相关文章:

java - 我的控制台说它终止了一个文件,但它从未在控制台中写入我需要的单词

spring - 如何避免 Spring Boot 应用程序中的冗余流量?

security - 其他 EC2 用户网络可以嗅探我的流量吗?

javascript - 如何集成基于 angularjs 和 java jaas 的身份验证?

Java 从线程启动到开始运行会发生什么

java - Vertx自动化部署

java - 状态模式共享状态对象高效和可扩展实现之间的共同知识

java - 即使在 Spring Boot Web 应用程序中登录某些资源时也需要密码

ElasticSearch 2.0 Java API : java. lang.ClassNotFoundException : org. elasticsearch.common.settings.ImmutableSettings$Builder

python - 如何在 python 上生成安全 session_id ?