Java 使用RESTWeb服务进行spring安全登录

Java 使用RESTWeb服务进行spring安全登录,java,rest,spring-security,single-sign-on,Java,Rest,Spring Security,Single Sign On,我的公司有一个特定的身份验证提供商,它是一个内部RESTWeb服务。 事实上,您向web服务提供了一个登录名/密码,它将返回一个令牌(有效期为几个小时),必须在头中为web服务的下一个业务请求提供该令牌 我需要创建一个web应用程序,并将其插入该身份验证提供程序。 将it与Spring Security集成的最佳方式是什么 如何在不要求用户重新登录的情况下管理我的webapp中的令牌过期?如果要使用spring security并将身份验证委托给web服务,则需要实现spring securit

我的公司有一个特定的身份验证提供商,它是一个内部RESTWeb服务。 事实上,您向web服务提供了一个登录名/密码,它将返回一个令牌(有效期为几个小时),必须在头中为web服务的下一个业务请求提供该令牌

我需要创建一个web应用程序,并将其插入该身份验证提供程序。 将it与Spring Security集成的最佳方式是什么


如何在不要求用户重新登录的情况下管理我的webapp中的令牌过期?

如果要使用spring security并将身份验证委托给web服务,则需要实现spring security framework提供的AuthenticationProvider接口。你可以做这样的事情

 public class AuthProviderImpl implements AuthenticationProvider 
 {
      @Override
   public Authentication authenticate(Authentication authentication)
     throws AuthenticationException 
        {
          WebServiceAuthClient client = //get an handle to your web service
          //get user name, password from authenticate object
          client.autheticat(username, pwd);
        }

 }

将您的web应用程序配置为使用spring security

我刚刚遇到了一个与原始问题非常相似的情况,这就是我将要解决的问题:

编辑:

在我们的情况下,会话和绑定到它的cookie都是由外部管理的,我们只能基于外部会话存储验证和授权每个请求

因此,我们将使用自定义SecurityContextRepository

编辑2:


编写一个SecurityContextRepository来对照公共令牌存储检查每个请求是很简单的,将其连接到Spring Security是很疯狂的:Security-context.xml中的http元素不允许定制securityContextPersistenceFilter,所以我必须用普通bean来模拟它。一点也不有趣。

没有用户名或密码,会话是通过某种SSO进行预验证的。必须根据令牌存储验证每个请求(如果需要快速注销)