2016-08-08 17 views
1

私は2つのSpringブートアプリケーションをSpringセキュリティSAML拡張で保護しています。 2つのアプリケーションはすでに実行されています。最初のもの(web-ui-app)は、REST APIである2番目のもの(service-app)へのユーザーインターフェイスです。SSOとSAML - 複数のサービスプロバイダ

アイデンティティプロバイダによって正しく認証されたweb-ui-appにアクセスした後、私はいくつかのservices-appのメソッドにアクセスしようとします。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <body onload="document.forms[0].submit()"> 
     <noscript> 
     <p> 
      <strong>Note:</strong> Since your browser does not support JavaScript, you must press the Continue button once to proceed. 
     </p> 
     </noscript> 

     <form action="https://ServiceProvider.com/SAML/SLO/Browser" method="post"> 
     <div> 
      <input type="hidden" name="RelayState" value="0043bfc1bc45110dae17004005b13a2b"/> 
      <input type="hidden" name="SAMLRequest" value="PHNhbWxwOkxvZ291dFJlcXVlc3QgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iDQogICAgSUQ9ImQyYjdjMzg4Y2VjMzZmYTdjMzljMjhmZDI5ODY0NGE4IiBJc3N1ZUluc3RhbnQ9IjIwMDQtMDEtMjFUMTk6MDA6NDlaIiBWZXJzaW9uPSIyLjAiPg0KICAgIDxJc3N1ZXI+aHR0cHM6Ly9JZGVudGl0eVByb3ZpZGVyLmNvbS9TQU1MPC9Jc3N1ZXI+DQogICAgPE5hbWVJRCBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQiPjAwNWEwNmUwLWFkODItMTEwZC1hNTU2LTAwNDAwNWIxM2EyYjwvTmFtZUlEPg0KICAgIDxzYW1scDpTZXNzaW9uSW5kZXg+MTwvc2FtbHA6U2Vzc2lvbkluZGV4Pg0KPC9zYW1scDpMb2dvdXRSZXF1ZXN0Pg=="/> 
     </div> 
     <noscript> 
      <div> 
       <input type="submit" value="Continue"/> 
      </div> 
     </noscript> 
     </form> 
    </body> 
</html> 

これは、SSOの会話です:

しかし、代わりにサービス・アプリ、JSON応答から正しい応答を受信した、私はこのような何かを受け取ります。私は既にweb-ui-appによってログインしているので、サービス-appとサービスプロバイダの間のトランスペアレントな鍵交換であるとは思いませんか?

私には何が欠けていますか?

+0

サービスプロバイダとして両方のプロジェクトをセットアップしていますか?ステートレスなセキュリティやセッションを使用していますか? 「Spring Security SAML拡張機能で保護されている」と言ったときに正確に何を意味するかを詳しく説明できますか?フロントエンドとバックエンドの両方が別々のサービスプロバイダであると言うのは正しいでしょうか? – blur0224

+0

はい、フロントエンドとバックエンドはどちらもサービスプロバイダです。ステートレスサービス、残りのAPIはSAMLで保護することはできません。この場合の最善のアプローチは、フロントエンドアプリケーションでSAMLを使用し、残りのAPIでトークン認証を使用するOpenIDを使用することです。 –

答えて

2

SAMLを使用すると、1つのアプリケーションを残りのAPIで保護することができますが、アプリケーションまたはセッションコンテキストを共有しないフロントエンドとバックエンドを分離しても機能しません。たとえば、フロントエンドがパッケージ化された単一のアプリケーションを単一のサービスプロバイダとして構成する場合、セッションはバックエンドのAPI要求に対して有効です。

フロントエンドをサービスプロバイダとして設定しておくと、前述のようにREST APIにステートレストークンベースのセキュリティを使用できます。このアーキテクチャはセッションよりも優れているため、このアーキテクチャが好まれます。すべてのリクエストはREST APIの任意のインスタンスに移動して処理できる必要があります。したがって、APIのインスタンスを追加または削除して、必要に応じてアプリケーションを拡張できます。

JSON Web Tokens (JWT)は、トークン内のカスタムクレームのユーザーに関する情報を保存するのに適しているため、適切なオプションです。残りのAPIのすべてのインスタンスが同じ共有秘密のトークンに署名すると、要求はどのインスタンスにも送られ、そのインスタンスはトークンをデコードし、クレーム情報(ユーザーIDなど)を保存することなく取得できますメモリ内のキャッシュまたはデータベースに保存します。

関連する問題