次のように我々が探しているシナリオは次のとおりです。RESTエンドポイント認証のSpring Security予期しない動作?
- クライアントは
200 OK
と が
- クライアントが保持トークンのログインを返す必要がRESTのログインURL(春のセキュリティを使用して)
- 春microserviceにRESTと接続トークン
- クライアントは、同じトークンを使用して他のRESTエンドポイントを呼び出します。
しかし、クライアントが302
とLocation
というヘッダーをトークンとともに取得していることがわかります。したがって、認証は行いますが、望ましくないHTTP応答のステータスコードとヘッダーが付いています。
ザ・春のセキュリティ設定は、次のようになります。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable() // Refactor login form
// See https://jira.springsource.org/browse/SPR-11496
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
.and()
.formLogin()
.loginPage("/signin")
.permitAll()
.and()
.logout()
.logoutUrl("/signout")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated();
...
}
私はインターセプタとフィルタを追加しようとしたが、302及び場所は春の側に設定して、コメントを追加している場所を確認することはできません。 (「200 OK予想通り
がServer=Apache-Coyote/1.1
X-Content-Type-Options=nosniff
X-XSS-Protection=1; mode=block
Cache-Control=no-cache, no-store, max-age=0, must-revalidate
Pragma=no-cache
Expires=0
X-Frame-Options=DENY, SAMEORIGIN
Set-Cookie=JSESSIONID=D1C1F1CE1FF4E1B3DDF6FA302D48A905; Path=/; HttpOnly
Location=http://ec2-35-166-130-246.us-west-2.compute.amazonaws.com:8108/ <---- ouch
Content-Length=0
Date=Thu, 22 Dec 2016 20:15:20 GMT
任意の提案は、どのようにそれを動作させるために: しかし、Location
ヘッダはレスポンスヘッダーに表示されないが(春SecurityヘッダーLINKの残りの部分と一緒に)クライアント側で受信しました"、ロケーションヘッダーとトークンはありません)?
注:Springブート、Springセキュリティ、UIなし、RESTエンドポイントを呼び出すクライアントコードのみを使用します。
私たちがやっていることは、アプリケーションがPOSTとクレデンシャルでログインし、ログイントークンを受け取ったときにurlを持つことです。なぜ私は何かがあるはずではないのですか? – Roy
//クライアントの呼び出し: 新しいRestTemplate()。実行(SIGIN_URL、HttpMethod.POST、 \t新しいRequestCallback(){... }、 \t新しいResponseExtractor ... { \tパブリックオブジェクトextractData(...){ //ステータスコードは302 \t headersToUpdate.add( "クッキー"、response.getHeaders()。getFirstと(「セット - ですCookie ")); \t戻り値: (UIとボタンはありません) – Roy