在过滤器中处理可选的 JWT 身份验证是个好主意吗?

Posted

技术标签:

【中文标题】在过滤器中处理可选的 JWT 身份验证是个好主意吗?【英文标题】:Is it a good idea to handle optional JWT Authentication in Filter? 【发布时间】:2020-05-26 21:08:43 【问题描述】:

我是 Spring Boot 新手,我目前的项目是使用 Spring Webflux 开发的 REST API。目标是拥有一个具有可选 JWT 令牌的端点,允许您匿名或不匿名创建事物。但据我所知,Spring Security 的所有入门指南都非常复杂,并且使用 Spring MVC。

现在我的想法是创建一个 HandlerFilterFunction 看起来像

class AuthenticationFilter : HandlerFilterFunction<ServerResponse, ServerResponse> 
    override fun filter(request: ServerRequest, next: HandlerFunction<ServerResponse>): Mono<ServerResponse> 
        val authHeader = request.headers().header("Authorization").firstOrNull()
        // get user from database
        request.attributes()["user"] = user
        return next.handle(request)
    

并将其添加到 router ... bean。

这是个好主意,还是我应该换一个路由器?如果是这样,有人可以向我指出 Spring Webflux 的 JWT 教程。

【问题讨论】:

你可以看看docs.spring.io/spring-security/site/docs/current/reference/… 【参考方案1】:

Spring Security docs 指向代码库中的a JWT-Based WebFlux Resource Server sample。

不是基于Kotlin的,所以我刚才也发了a sample of my own;希望它可以帮助您入门。

至于您的问题,是的,您可以创建自己的过滤器,尽管 Spring Security 附带了 BearerTokenAuthenticationFilter,它已经完成了您的过滤器可能会做的事情。第一个链接示例手动添加此过滤器,而第二个示例让 Spring Boot 添加它。

【讨论】:

这对我的项目来说太多了。我只需要一个简单的 JWT 身份验证而不使用 OAuth。 什么框架要求你做的太多了? Oauth 需要一个 oauth 提供程序,我不需要这个项目 您打算如何验证令牌的正确性? (如果您有兴趣,这里最好有一个聊天室。) 是的,我真的很想和你聊天并更好地了解

以上是关于在过滤器中处理可选的 JWT 身份验证是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

通过 express req 参数传递解码的 jwt 数据是个好主意吗?

将验证/测试数据与训练数据混合是个好主意吗?

实现 JWT 的最佳方式?

直接在数据库上处理大量数据是个好主意吗?

动态 SQL 表是个好主意吗?

使用带有 fallthrough 的开关来处理 Javascript 中的默认参数是个好主意吗?