応答がなかったので、同じ SSO 動作を実現するためにアプローチを少し変更しました。この問題を解決するために、ここで自分の質問に答えています。
を使用する代わりに、HttpRequest からプリンシパルと資格情報を取得するRequestHeaderAuthenticationFilter
Spring をサブクラス化しました。次に、UserDetails をロードする前にサーバー アプリで Credentials を検証するAbstractPreAuthenticatedProcessingFilter
カスタムを実装しました。preAuthenticatedUserDetailsService
#2 に関しては、最初の事前認証済みログイン リクエストでカスタム ヘッダーを使用しなくなりました。クライアントアプリへの最初の事前認証済み「ログイン」リクエストに、プリンシパル (ユーザー名) と資格情報を URL パラメーターとして追加するだけです。2 つのアプリ間の通信は SSL で保護されているため、安全であると判断しました。
これは、私のセキュリティ設定が現在どのように見えるかです:
<b:bean id="http403EntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
<b:bean id="navigatorPreAuthFilter" class="com.example.NavigatorPreAuthenticatedProcessingFilter">
<b:property name="authenticationManager" ref="authenticationManager" />
</b:bean>
<http auto-config="false" entry-point-ref="http403EntryPoint">
<custom-filter position="PRE_AUTH_FILTER" ref="navigatorPreAuthFilter" />
<session-management session-fixation-protection="newSession" />
<logout logout-success-url="/logout" delete-cookies="JSESSIONID" />
<intercept-url pattern="/index.jsp" access="ROLE_QUESTIONNAIRE_ASSIGNEE"/>
</http>
<b:bean id="preAuthenticatedUserDetailsService" class="com.example.NavigatorPreAuthenticatedUserDetailsService" />
<b:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<b:property name="preAuthenticatedUserDetailsService" ref="preAuthenticatedUserDetailsService" />
</b:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="preauthAuthProvider"/>
</authentication-manager>