Spring Security 3.2 令牌认证

Posted

技术标签:

【中文标题】Spring Security 3.2 令牌认证【英文标题】:Spring Security 3.2 Token Authentication 【发布时间】:2013-08-10 11:58:40 【问题描述】:

我知道这已经被问过了,但我无法让它工作。 这是我想要完成的:

我正在使用 Spring Security 3.2 来保护类似 REST 的服务。没有服务器端会话。 我没有使用基本身份验证,因为这意味着我需要将用户的密码存储在客户端的 cookie 中。否则,用户将需要在每次页面刷新/更改时登录。存储令牌是我认为较小的邪恶。

    Web 客户端(浏览器、移动应用)调用类似 REST 的 URL 以使用用户名和密码登录“/login” 服务器对用户进行身份验证并将令牌发送回客户端 客户端存储令牌并在每次 api 调用时将其添加到 http 请求标头中 服务器检查令牌的有效性并相应地发送响应

我什至还没有看令牌生成部分。我知道它是倒退的,但我想先实现令牌验证部分。

我试图通过使用自定义文件管理器(AbstractAuthenticationProcessingFilter 的实现)来实现这一点,但是我似乎对此有错误的想法。

这样定义:

public TokenAuthenticationFilter() 
    super("/");

只会针对这个确切的 URL 触发过滤器。 我坚持一些示例实现,它调用不接受通配符的 AbstractAuthenticationProcessingFilter#requiresAuthentication 。 我当然可以改变这种行为,但这不知怎的让我觉得我走错了路。

我还开始实现自定义 AuthenticationProvider。也许这是正确的? 有人可以推动我朝着正确的方向前进吗?

【问题讨论】:

我尝试做同样的事情 .. 你在 spring security 上成功了吗?你能详细说明你的解决方案吗? 您找到解决方案了吗? 【参考方案1】:

我认为预授权过滤器更适合您的场景。 覆盖 AbstractPreAuthenticatedProcessingFilter 的 getPrincipal 和 getCredentials 方法。 如果标头中不存在令牌,则从 getPrincipal 返回 null。

流程:

用户第一次登录,没有通过header,所以没有 securityContext中设置的认证对象,普通认证 流程如下,即 ExceptionTranslation 过滤器重定向用户 基于表单登录过滤器或您的自定义 authenticationEntryPoint 到 /login 页面 认证成功后,用户请求安全 url,pre-auth 过滤器从设置的 header 认证对象中获取令牌 securityContext,如果用户有权访问,则允许他访问受保护的 网址

【讨论】:

以上是关于Spring Security 3.2 令牌认证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 实现具有两级令牌认证的 Spring Boot 微服务?

Spring-Security-Oauth2 基于JDBC存储令牌和RBAC权限认证

Spring security oauth 令牌提取

Spring Security整合JWT实现权限认证和授权

Spring Security + JWT学习

认证开发+Oauth2(授权码)模式+Spring Security+网关解说