(2) ist eine Anforderung, dass das vorhandene externe Authentifizierungssystem ein Token im HTTP-Anforderungsheader setzt und umleitet, wenn die Authentifizierung erfolgreich ist, damit SSO, das dies verwendet, realisiert wird.
(1) Unabhängige oder (2) Unabhängige Implementierungsbeispiele sind im gesamten Internet zu finden, aber ich konnte kein Muster finden, um sie zusammen zu verwenden (und es war technisch wie es war), daher werde ich vorstellen, wie es realisiert wurde.
<sec:custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
<sec:custom-filter position="FORM_LOGIN_FILTER" ref="formLoginFilter" />
Verwenden Sie die RequestHeaderAuthenticationFilter-Klasse wie folgt, um "PRE_AUTH_FILTER" anzupassen. Setzen Sie die Eigenschaft exceptionIfHeaderMissing auf false und die Eigenschaft continueFilterChainOnUnsuccessfulAuthentication auf true, um die Formularauthentifizierung zu vereinfachen.
<bean id="siteminderFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter">
<property name="principalRequestHeader" value="SM_USER"/>
<property name="authenticationManager" ref="sm_authenticationManager" />
<property name="exceptionIfHeaderMissing" value="false"/>
<property name="continueFilterChainOnUnsuccessfulAuthentication" value="true"/>
</bean>
Hier wird AuthenticationManager (und AuthenticationProvider) wie folgt definiert.
<sec:authentication-manager id="sm_authenticationManager">
<sec:authentication-provider ref="preauthAuthProvider" />
</sec:authentication-manager>
<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="customUserDetailsService"/>
</bean>
</property>
</bean>
Verwenden Sie die PreAuthenticatedAuthenticationProvider-Klasse für AuthenticationProvider. Beachten Sie, dass der UserDetailsService, der der Eigenschaft preAuthenticatedUserDetailsService zugewiesen wurde, von der UserDetailsByNameServiceWrapper-Klasse umschlossen werden muss.
<sec:authentication-manager id="form_authenticationManager">
<sec:authentication-provider user-service-ref="customUserDetailsService" >
</sec:authentication-provider>
</sec:authentication-manager>
<bean id="formLoginFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name="authenticationManager" ref="form_authenticationManager" />
<property name="authenticationSuccessHandler" ref="formLoginSuccessHandler" />
<property name="authenticationFailureHandler" ref="formLoginFailureHandler" />
<property name="filterProcessesUrl" value="/login" />
</bean>
Da hier ein benutzerdefinierter Filter verwendet wird, muss das Attribut "entry-point-ref" des
<sec:http auto-config="false" use-expressions="true" entry-point-ref="loginUrlAuthenticationEntryPoint">
~Unterlassung~
<sec:custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
<sec:custom-filter position="FORM_LOGIN_FILTER" ref="formLoginFilter" />
</sec:http>
<bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<constructor-arg value="/loginPage" />
</bean>
① Geben Sie im Anmeldebildschirm "Benutzer" als Benutzername und "Passwort" als Passwort für die Anmeldung ein und Sie werden authentifiziert. (2) Wenn Sie im HTTP-Anforderungsheader [^ 2] den Wert "user" auf das Attribut "SM_USER" setzen, werden Sie authentifiziert. Hier wird der im folgenden Artikel vorgestellte ModHeader verwendet.
Legen Sie die Authentifizierungsinformationen extern im HTTP-Header des Browsers --Qiita fest https://qiita.com/utwang/items/1eeb25d27e8acea33a8a
[^ 1]: Es tut mir sehr leid, aber zum Zeitpunkt der Veröffentlichung des Artikels wird gesagt, dass https nicht unterstützt wird (obwohl es sich um eine Authentifizierung handelt!). Es tut mir Leid. Ich werde mir Zeit nehmen, mich damit zu befassen.
[^ 2]: Der Attributname "SM_USER" im Anforderungsheader ist nur ein Beispiel. In der tatsächlichen Entwicklung sollten Attributnamen schwer zu erraten und vertraulich behandelt werden.
Greifen Sie in diesem Status beispielsweise auf die folgende URL zu.
Dann werden Sie authentifiziert und die Seite wird angezeigt.
Wenn das Attribut "SM_USER" im HTTP-Anforderungsheader nicht festgelegt ist, wird der Anmeldebildschirm angezeigt, sodass Sie durch Benutzername und Kennwort authentifiziert werden.
Spring Security Usage Memo Authentifizierung / Autorisierung --Qiita https://qiita.com/opengl-8080/items/032ed0fa27a239bdc1cc
03-1. So stellen Sie Spring Security 2 ein - Soracane https://sites.google.com/site/soracane/home/springnitsuite/spring-security/spring-securityno-settei-houhou
Technischer Hinweis - Erklärt, wie Sie Ihren eigenen Authentifizierungsprozess für die Frühlingssicherheit erstellen http://javatechnology.net/spring/spring-security-login-filter-original/
Arbeitsnotizen beim Anwenden von Spring Security-Namihira Blog http://namihira.hatenablog.com/entry/20160817/1471396975
AbstractAuthenticationProcessingFilter (Spring Security 4.2.6.RELEASE API) https://docs.spring.io/spring-security/site/docs/4.2.6.RELEASE/apidocs/org/springframework/security/web/authentication/AbstractAuthenticationProcessingFilter.html
Spring Security Java - Multiple Authentication Manager - 2 bean found error - Stack Overflow https://stackoverflow.com/questions/32105846/spring-security-java-multiple-authentication-manager-2-bean-found-error
Recommended Posts