私のアプリは、Oracle Access Manager SSO からユーザー名を含む AUTH_USER リクエスト ヘッダーを取得します。Spring Security "Additional Topics" 2.2.1 には、必要と思われる "PreAuth" の例がありますが、完全に機能する例ではありません。
以下のスニペットは docs/examples からのもので、注釈ベースの構成が機能していません。
Siteminder の設定例 - RequestHeaderAuthenticationFilterとPreAuthenticatedAuthenticationProviderおよび UserDetailsService で XML を使用してユーザーを検索します。
これは Java ベースの構成にどのようにマップされますか?
<security:http>
<!-- Additional http configuration omitted -->
<security:custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
</security:http>
<bean id="siteminderFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter">
<property name="principalRequestHeader" value="AUTH_USER"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth. PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
<bean id="userDetailsServiceWrapper"
class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<property name="userDetailsService" ref="userDetailsService"/>
</bean>
</property>
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</security:authentication-manager>
Spring Security の事前認証の例では、まったく異なるセットアップが行われています (XML 構成はさらに威圧的です)。事前認証フィルターやヘッダー名の設定方法については言及されていません。
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login","/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.jee()
.mappableRoles("USER","ADMIN");
}
}
spring-boot-sample-web-secure は、WebSecurityConfigurerAdapter の代わりに WebMvcConfigurerAdapter を拡張し、基本的なフォームベースのログインのみを行い、事前認証 AUTH_USER ヘッダーからユーザー ID を取得する方法に関する情報はありません。
public class SampleWebSecureApplication extends WebMvcConfigurerAdapter {
... omitted...
@Bean
public ApplicationSecurity applicationSecurity() {
return new ApplicationSecurity();
}
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private SecurityProperties security;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin()
.loginPage("/login").failureUrl("/login?error").permitAll();
}
}
}
多くの参照/記事を読みましたが、それらは現在のコードと Spring-boot に関連していないようです。そのため、アプリの事前認証セキュリティを構成する方法を理解しようとして行き詰まりました。