5.5.2. 仕組み
この例では、idp-domain
セキュリティードメインの DatabaseLoginModule
によって使用されるデータベースに以下のユーザーが追加されています。
表5.6 idp-domain ユーザー
ユーザー名 | パスワード | ロール |
---|---|---|
Eric | samplePass | all |
Amar | samplePass | AB |
Brian | samplePass | C |
Alan | samplePass |
EAP-IDP
の起動時、管理インターフェイスが起動した後に idp-domain
を含む security
サブシステムを含め、サブシステムとデプロイされたアプリケーション、IDP.war
が起動します。IDP-domain
はデータベースに接続し、DatabaseLoginModule
ログインモジュールに設定されているようにユーザー名、パスワード、およびロールをロードします。機密情報が DatabaseLoginModule
ログインモジュールの設定にプレーンテキストで保存されないようにするため、データベースのパスワードなどの一部のフィールドを隠すようパスワードハッシュが設定されます。IDP.war
は 認証と承認に idp-domain
を使用します。また、認証されたユーザーに SAML トークンを発行し、認証の対象となるユーザーに対して簡単なログインフォームを提供するため、IDP.war
は jboss-web.xml
、web.xml
、picketlink.xml
、および jboss-deployment-structure.xml
を使用して設定されます。これにより、IDP として機能できるようになります。
EAP1
、EAP2
、および EAP3
の起動時、管理インターフェイスが起動した後に security
を含むサブシステムとデプロイされたアプリケーションが起動します。security サブシステムには各インスタンスの sso-domain
が含まれ、それぞれ sampleAppA.war
、sampleAppB.war
、および sampleAppC.war
が含まれます。sso-domain
は SAML2LoginModule
ログインモジュールを使用するよう設定されますが、アプリケーションに依存して適切な SAML トークンを提供します。よって、sso-domain
を使用するすべてのアプリケーションは適切に IDP に接続して SAML トークンを取得する必要があります。この場合、各 sampleAppA
、sampleAppB
、および sampleAppC
は jboss-web.xml
、web.xml
、picketlink.xml
、および jboss-deployment-structure.xml
を介して設定され、IDP のログインフォームを使用して IDP.war
から SAML トークンを取得します。
また、各アプリケーションは独自の許可されるロールでも設定されます。
表5.7 アプリケーション/SP ロール
アプリケーション/SP | 許可されるロール |
---|---|
sampleAppA | all、AB |
sampleAppB | all、AB |
sampleAppC | all、C |
認証されていないユーザーが sso-domain
によってセキュア化された URL (すべてのアプリケーションの /secure/*
) にアクセスしようとすると、ユーザーは IDP.war
のログインページにリダイレクトされます。その後、ユーザーはフォームを使用して認証され、ユーザーのアイデンティティーとロール情報が含まれる SAML トークンが発行されます。ユーザーは元の URL にリダイレクトされ、SAML トークンが SP であるアプリケーションに提示されます。アプリケーションは SAML トークンが有効であることを確認し、SAML トークンによって提供されたロールとアプリケーションで設定されたロールを基にしてユーザーを承認します。ユーザーに SAML トークンが発行された後、同じ IDP を使用して SSO によってセキュア化された別のアプリケーションでは、ユーザーはそのトークンを使用して認証および承認されます。SAML トークンの期限が切れ、無効になると、ユーザーは IDP から新しい SAML トークンを取得する必要があります。
この例では、Eric が EAP1/sampleAppA/secure/hello.html
にアクセスすると、ログインのために EAP-IDP/IDP/login.html
にリダイレクトされます。正常にログインした後、Eric にユーザー情報とロール all
が含まれる SAML トークンが発行され、EAP1/sampleAppA/secure/hello.html
にリダイレクトされます。この SAML トークンが sampleAppA
に提示され、トークンの確認後にロールを基にして承認が行われます。sampleAppA
は、ロール all
および AB
の /secure/*
へのアクセスを許可します。 Eric は all
ロールを持っているため、EAP1/sampleAppA/secure/hello.html
にアクセスできます。
Eric が EAP2/sampleAppB/secure/hello.html
にアクセスしようとすると、この SP に対しては認証されていないため、認証リクエストとともに IDP.war
にリダイレクトされます。Eric はすでに IDP に対して認証されているため、その SP に対する新しい SAML トークンとともに IDP.war
によって EAP2/sampleAppB/secure/hello.html
にリダイレクトされ、再認証は必要ありません。sampleAppB
は新しい SAML トークンを確認し、ロールを基にして承認を行います。sampleAppB
は、ロール all
および AB
の /secure/*
へのアクセスを許可します。 Eric は all
ロールを持っているため、EAP2/sampleAppB/secure/hello.html
にアクセスできます。Eric が EAP3/sampleAppC/secure/hello.html
にアクセスする場合も同様に処理されます。
SAML トークンがグローバルログアウトによって無効になった後、Eric が EAP1/sampleAppA/secure/hello.html
や、EAP2/sampleAppB/secure/*
または EAP3/sampleAppC/secure/*
以下の URL に戻ろうとすると、再認証のために EAP-IDP/IDP/login.html
へリダイレクトされ、新しい SAML トークンが発行されます。
Amar が EAP1/sampleAppA/secure/hello.html
または EAP2/sampleAppB/secure/hello.html
にアクセスしようとすると、Eric と同様に処理されます。Amar は AB
ロールを持ち、EAP1/sampleAppA/secure/*
および EAP2/sampleAppB/secure/*
のみにアクセスできます。そのため、 EAP3/sampleAppC/secure/hello.html
にアクセスしようとすると、SAML トークンの保持または取得が必要になりますが、EAP3/sampleAppC/secure/hello.html
の閲覧は制限されます。Brian も同様ですが、EAP3/sampleAppC/secure/*
のみにアクセスできます。Alan はロールを持たないため、サービスプロバイダーのセキュアな領域にアクセスしようとすると、SAML トークンの保持または取得が必要になりますが、閲覧はすべて制限されます。各 SP には、承認の有無に関わらず、すべてのユーザーが SAML トークンを取得しなくても閲覧可能なセキュアでない領域もあります。