【问题标题】:Implementing filter-based JWT authentication vs OAuth2 JWT authentication on Spring Boot 2在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证
【发布时间】:2018-11-29 16:41:49
【问题描述】:

据我所知,OAuth2 框架需要一个自定义 JWT 身份验证服务器,我必须为基于过滤器的 JWT 实现创建一个带有 JWT 实用程序类的自定义安全过滤器。

但是我的问题是,在 Spring Boot 2 上实现 JWT 的最佳方法是什么?基于过滤器的身份验证还是 OAuth2?

根据客户端和应用程序的性质,有什么优缺点吗?

举个例子;如果应用程序管理不同的客户端(例如移动、Web、Web 服务等),OAuth2 身份验证是否提供任何优势?

注意:我的问题与 Spring-Boot REST API + Web 应用程序的安全性有关。

【问题讨论】:

    标签: spring-boot jwt spring-security-oauth2 java-ee-8


    【解决方案1】:

    我找到了关于同一问题的讨论,我正在提取以下要点。

    从技术的角度来看,我仍然不清楚具体的实现方式、时间和地点,但这有助于我做出决定。

    1. 当我只需要 JWT 身份验证时,我个人犹豫是否引入 OAuth。感觉很混乱,老实说,我不希望使用 @EnableResourceServer 等增加额外的复杂性。也许这只是几行配置,但如果感觉有点矫枉过正。
    2. 谁能告诉我为什么使用 JWT 令牌设置 OAuth2 提供程序如此困难?如果你想要 JWT 令牌,所有代码都已经在这里了。为什么使用它就这么难?

      答案:

      也许这并不难,但 1) 这样做感觉不自然,2) 这样做会更容易。 而不是使用@EnableResourceServer 和其他设置,我想要更简单的东西,比如:

      @Override
              protected void configure(HttpSecurity http) throws Exception {
          http
              .jwt()
                  .loginUrl(new AntPathRequestMatcher("/api/login", "POST"))
                  .secret("my-super-duper-secret")
                  .claimsProvider(new MyClaimsProvider)
      

      您通常希望为 JWT 设置的内容是登录 url(可以默认为 /login)、密码和可选的一些 claimProvider 实现。应提供开箱即用的默认实现,将用户名和角色添加到声明中。 这样在 Spring Security 中设置 JWT 将非常容易。

    3. 1234563如果您开始担心这种问题(您应该担心),那么您最终会实现一些非常接近 OAuth2 的东西,此时您可能会说“我们为什么不首先使用 OAuth2?”你明白我的意思吗?
    4. 这个问题中描述的用例在概念上与 OAuth2 用例不是不同吗?在这里,我们将密码作为输入,将 JWT 令牌作为输出,然后使用 JWT 令牌访问资源。 OAuth 2 规范的 JWT 配置文件指定了一种不同的情况,其中 JWT 令牌是令牌服务的输入,访问令牌是输出,然后访问令牌用于访问资源。

    5. 最好只使用简单的 JWT 令牌基础身份验证而不使用 OAuth,这对于小型项目来说有时会很复杂。

    https://github.com/spring-projects/spring-security-oauth/issues/368

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 2018-10-27
      • 2018-02-27
      • 2017-11-02
      • 2022-10-05
      • 2015-01-21
      • 1970-01-01
      • 2015-10-30
      • 2016-04-03
      相关资源
      最近更新 更多