不使用 UsernamePasswordAuthenticationToken 的 Spring Security JWT 验证

Posted

技术标签:

【中文标题】不使用 UsernamePasswordAuthenticationToken 的 Spring Security JWT 验证【英文标题】:Spring Security JWT validation without using UsernamePasswordAuthenticationToken 【发布时间】:2020-10-02 12:24:48 【问题描述】:

我需要编写我的自定义 Security Spring 过滤器来验证 JWT 令牌。

我有我的自定义 JWT 验证器。当令牌有效时,我必须授权用户。

我像其他在线展示的示例一样实现了这个:

UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(user_id, null, null);

usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));  
                  SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);

这很好,但我的问题是:是否有专门的 AuthenticationToken 用于 JWT 验证而不使用 UsernamePasswordAuthenticationToken?

我不喜欢使用 UsernamePasswordAuthenticationToken...这是个好习惯吗?

【问题讨论】:

【参考方案1】:

当然,从干净代码的角度来看,它看起来并不好,因为它的名称 UsernamePasswordAuthenticationToken 与对象所做的事情不匹配。 JWT 与密码无关。就像你用橙色这个名字来指代苹果一样,也会让人困惑。

JWT 通常用作 Bearer 令牌,spring-security-oauth2-resource-server 提供了一个 BearerTokenAuthenticationToken。但它会将所有其他 OAuth2 依赖项提取到您的项目中。所以如果你不需要 OAuth2 而只需要这个令牌类,只需自己创建一个。

【讨论】:

以上是关于不使用 UsernamePasswordAuthenticationToken 的 Spring Security JWT 验证的主要内容,如果未能解决你的问题,请参考以下文章

c语言报错不允许使用不完整类型,让用户自定义数组大小。

参数标志,不使用时为空,不使用时为默认值

如何设置相机视图旋转(不使用不推荐使用的代码)

使用 jQuery 提交表单并使用 PHP 发送.. 不知道为啥它不发送

UITableViewCell 不使用不推荐使用的方法 initWithFrame:reuseIdentifier

不推荐使用:不推荐使用 FCM 直接通道,请使用 APNs 进行下游消息处理