我有一个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以获得新会话?
答案 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;
}