0

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

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

根据客户和应用程序的性质,是否有任何利弊?

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

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

4

1 回答 1

3

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

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

  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. 使用 OAuth2 有一个“刷新令牌”,因此您将责任放在客户端上以保持访问令牌处于活动状态,并且授权服务器可以在每次刷新时检查用户帐户。如果您开始担心这种问题(您应该担心),那么您最终会实现一些非常接近 OAuth2 的东西,此时您可能会说“我们为什么不首先使用 OAuth2?” 你明白我的意思吗?

  4. 这个问题中描述的用例在概念上是否与 OAuth2 案例不同?在这里,我们将密码作为输入,将 JWT 令牌作为输出,然后使用 JWT 令牌访问资源。OAuth 2 规范的 JWT 配置文件指定了一种不同的情况,其中 JWT 令牌是令牌服务的输入,访问令牌是输出,然后访问令牌用于访问资源。

  5. 在没有 OAuth 的情况下仅使用简单的 JWT 令牌基础身份验证会很好,这对于小型项目有时会很复杂。

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

于 2018-07-20T11:19:25.127 回答