首页 文章

在Spring Boot 2上实现基于过滤器的JWT身份验证与OAuth2 JWT身份验证

提问于
浏览
0

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

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

根据客户和应用的性质有任何利弊吗?

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

Note: 我的问题与Spring-Boot REST API Web应用程序的安全性有关 .

1 回答

  • 1

    我找到了关于同一事项的讨论,我正在提取下面的重点 .

    从技术角度来看,我仍然没有清楚地知道哪个实现,何时何地,但它有助于我做出决定 .

    • 当我只需要JWT身份验证时,我个人不愿意引入OAuth . 感到困惑和诚实,我不希望使用@EnableResourceServer等额外的复杂性 . 也许它只是几行配置,但如果感觉有点矫枉过正 .

    • 有人能告诉我为什么用JWT令牌设置OAuth2提供程序如此困难?如果你想要JWT令牌,那么所有的代码都在这里 . 为什么这么难用呢?

    Answer:

    也许这并不难,但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非常容易 .

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

    • Isn't the use case described in this issue conceptually different from the OAuth2 case? Here we have a password as an input and JWT token as an output, and JWT token is then used for accessing the resources. The JWT profile for OAuth 2 spec specifies a different case, where a JWT token is an input to the token service and the access token is an output, and access token is then used for accessing the resources.

    • 在没有OAuth的情况下进行简单的JWT令牌库身份验证会很好,这对于小型项目来说有时很复杂 .

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

相关问题