如何在会话超时后将Spring Security配置为重定向到IDP?

时间:2017-11-06 20:42:42

标签: java spring spring-mvc

我有一个public function organizations(){ return $this->belongsToMany( Organization::class , 'organization_user', 'user_id', //user key on intermediate table 'organization_id' //organization key on intermediate table ); } public function roles(){ return $this->belongsToMany( Role::class , 'organization_user', 'user_id', //user key on intermediate table 'role_id' //role key on intermediate table ); } 类扩展SecurityConfiguration,看起来像这样:

WebSecurityConfigurerAdapter

首次登录时身份验证工作正常并且花花公子,但是在您登录7200秒(2小时)后,您会收到错误消息。例外情况如下:

@Override
protected void configure(final HttpSecurity http) throws Exception {

  http
  .authorizeRequests()
      .antMatchers("/saml*").permitAll()
      .anyRequest().authenticated()
      .and()
  .apply(SAMLConfigurer.saml())
      .serviceProvider()
            .keyStore()
            .storeFilePath(keystoreFilePath)
            .password(keystorePassword)
            .keyname(keystoreAlias)
            .keyPassword(keystorePassword)
            .and()
          .protocol(appProtocol)
          .hostname(appHostName)
          .basePath(appBasePath)
          .and()
      .identityProvider()
      .metadataFilePath(metadataFilePath);
}

这是有道理的,因为来自IDP的身份验证来自很久以前。

当发生这种情况时,如何配置Spring重定向回IDP以获得新会话?

1 个答案:

答案 0 :(得分:0)

严格来说不是直接回答,但有助于解决问题。

我遇到了同样的问题,当在第 538 行打开 WebSSOProfileConsumerImpl.java 的源代码时,它显示验证是针对 7200 秒的默认配置完成的。

根据我的经验,ADFS 和 OKTA 重用身份验证超过 24 小时,即使您重定向回来,它们也会返回具有相同身份验证和无限重定向循环的用户。

我为解决这个问题(可能不正确/不安全)所做的是通过创建一个 maxAuthenticationAge Bean 并调用它的 WebSSOProfileConsumer 来增加 setMaxAuthenticationAge() 的值

  /* set max authentication age in seconds - 3days * 24h * 3600sec/hour */
  private static final long MAX_AUTHENTICATION_AGE = 3 * 24 * 3600;
  ...
  @Bean
  public WebSSOProfileConsumer webSSOprofileConsumer() {
    WebSSOProfileConsumerImpl consumer = new WebSSOProfileConsumerImpl();
    consumer.setMaxAuthenticationAge(MAX_AUTHENTICATION_AGE);
    return consumer;
  }