2016-06-30 7 views
0

Spring Securityは、2つの別々のjarファイルから2つの別々のポートで実行される2つの別々のSpringブートバックエンドサービスを保護しています。サービスの1つ(resource, with full code at this link)は、フロントエンドのNode.jsサーバーからのGET要求に応答しますが、他のサービス(authserver, will full code at this link.と呼ばれます)は応答しません。 authserverアプリがnode.jsサーバーからのリクエストに応答できるように、春のセキュリティ設定を変更するにはどうすればよいですか?ここでnode.jsがSpringブートセキュリティからユーザプリンシパルを取得できない

は2つのバックエンドサービスへの要求を行いNode.jsのサーバーからexpress.jsコードです:

var url = require('url'); 
var request = require('request'); 

// expose the routes to our app with module.exports 
module.exports = function(app) { 

    // application -------------------------------- 
    app.get('/resource/**', function(req, res) { 
     request.get('http://localhost:9000/resource', function (error, response, body) { 
      if(error){console.log('ERROR with resource request.')} 
      if (!error){// && response.statusCode == 200) { 
       console.log(response.statusCode); 
       console.log(body); 
      }; 
     }); 
     console.log("You Hit The Resource Route "); 
    }); 

    app.get('/user/**', function(req, res) { 
     request.get('http://localhost:9999/uaa/user', function (error, response, body) { 
      if(error){console.log('ERROR with user request.')} 
      if (!error){// && response.statusCode == 200) { 
       console.log(response.statusCode); 
       console.log(body); 
      }; 
     }); 
     console.log("You Hit The User Route "); 
    }); 

}; 

そして、ここではそれを示すnodemonログです:
1) authserverアプリの/uaa/userエンドポイントへのコールがresourceアプリの/resourceエンドポイントはを返したこと304応答(春ブーツauthserverアプリのログが要求を受信の証拠を示さない)、および
2)を得ました応答(春ブーツresourceアプリのログは、要求を受けたことを示してください):

[nodemon] starting `node server.js` 
App listening on port 8080 
GET /user 304 4.257 ms - - 
You Hit The Resource Route 
401 
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"} 

私は、Webブラウザにhttp://localhost:9999/uaa/userを入力すると与えて、要求を文書ログを作成するために、春のブートauthserverアプリをトリガーないことを確認ブラウザでXML以下:あなたのAuthserverApplication.javaで

<oauth> 
<error_description> 
Full authentication is required to access this resource 
</error_description> 
<error>unauthorized</error> 
</oauth> 

答えて

0

、あなたは.authorizeRequests().anyRequest().authenticated()と春のセキュリティをオーバーライド。 これは、すべての要求でユーザーが認証される必要があることを意味します。

(あなたの春のサービスを呼び出すときに、あなたのnodeJsサーバが認証トークン/ヘッダー/クッキーを送信しない場合)、認証されていないユーザーにアクセスを許可するためにGET /ユーザーに春のセキュリティで許可を変更しようと

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     // @formatter:off 
     http 
      .formLogin().loginPage("/login").permitAll() 
     .and() 
      .requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access") 
     .and() 
      .authorizeRequests() 
      .antMatchers(HttpMethod.GET, "/user").permitAll() 
      .anyRequest().authenticated(); 
     // @formatter:on 
    } 
+0

こと問題を解決しませんでした。すぐ問題は、Node.jsルートを '/ user/** 'から'/user ** 'に変更する必要があったことです。これはSpringのバックエンドに呼び出されましたが、コードを追加してもしなくても、結果は不正なエラーになります。 – DollarCoffee

+0

リクエストは、デフォルトでオンになっているCSRFフィルタによって傍受することもできます。 http.csrf()を追加してください。disable()あなたの問題を解決することを願っています。 – MGR

関連する問題