4.5. Kerberos を使用した web アプリケーションに対する SSO の提供
ここでは、JBoss で Kerberos を使用して web アプリケーションに SSO を提供する方法について説明します。JBoss EAP インスタンス EAP1
は作成済みで、スタンドアロンサーバーとして実行されています。sampleAppA
と sampleAppB
の 2 つの web アプリケーションが EAP1
にデプロイされています。両方のアプリケーションと EAP1
は、Kerberos でデスクトップベースの SSO を使用して認証するよう設定されています。
4.5.1. セキュリティー
JBoss EAP は、SPNEGO
認証を使用した Kerberos での認証を提供します。Kerberos と SPNEGO に特化した情報は、サードパーティーの SSO 実装 を参照してください。JBoss EAP とデプロイされた web アプリケーションが認証に Kerberos を使用するようにするには、kerberos-security-factory
を作成して Kerberos サーバーに接続します。Kerberos サーバーからユーザーにロールを割り当てるために、セキュリティーレルム、ロールマッパー、およびセキュリティードメインも作成されます。kerberos-security-factory
を使用し、認証とロールの割り当てにセキュリティードメインを使用する http-authentication-factory
が作成されます。認証方法は SPNEGO
認証を使用し、exampleSpnegoDomain
として公開されます。また、undertow
サブシステムは、認証に http-authentication-factory
を使用するよう設定されます。
sampleAppA
と sampleAppB
の両方は、認証の実行に exampleSpnegoDomain
を使用するよう設定され、承認にユーザーのロールを取得します。セキュリティートークンをオペレーティングシステムからブラウザーに渡すことができない場合のために、FORM
認証をフォールバック認証として両方のアプリケーションに設定することもできます。FORM
認証がフォールバックとして設定された場合、追加の認証方法とサポートするセキュリティードメインを設定する必要があります。認証方法は Kerberos と SPNEGO
には依存せず、FORM
認証のみをサポートする必要があります。この場合、追加の認証とサポートするセキュリティードメインを FORM
認証に対して設定し、exampleFormDomain
として公開する必要があります。各アプリケーションは exampleFormDomain
を使用し、FORM
認証をフォールバックとして提供するよう、設定されます。また、各アプリケーションはパス /secure/*
をセキュアにするよう設定され、承認の処理に独自のロールリストを提供します。
4.5.2. 仕組み
以下のユーザーが Kerberos サーバーに作成されています。
表4.5 Kerberos ユーザー
ユーザー名 | パスワード |
---|---|
Sande | samplePass |
Andrea | samplePass |
Betty | samplePass |
Chuck | samplePass |
セキュリティードメインを使用して以下のロールがユーザーにマップされます。
表4.6 ユーザーロール
ユーザー名 | ロール |
---|---|
Sande | all |
Andrea | A |
Betty | B |
Chuck |
各アプリケーションには以下のロールが設定されています。
表4.7 アプリケーションロール
アプリケーション/SP | 許可されるロール |
---|---|
sampleAppA | all、A |
sampleAppB | all、B |
起動時に、EAP1
はコアサービスをロードしてから elytron
およびその他のサブシステムをロードします。kerberos-security-factory
は Kerberos サーバーへの接続を確立します。sampleAppA
と sampleAppB
の両方がデプロイされ、認証のために exampleSpnegoDomain
と exampleFormDomain
に接続します。
Sande は Kerberos でセキュア化されたコンピューターにログインしています。Sande はブラウザーを開き、sampleAppA/secure/hello.html
へのアクセスを試みます。このページはセキュアであるため、認証が必要になります。EAP1
は、Sande のコンピューターに設定されている Kerberos Key Distribution Center (Kerberos サーバー) へのキーを要求するリクエストを送信するよう、ブラウザーに指示します。ブラウザーがキーを取得すると、sampleAppA
に送信されます。sampleAppA
は exampleSpnegoDomain
を使用してチケットを JBoss EAP に送信します。そこでチケットがアンパックされ、kerberos-security-factory
の設定済みの Kerberos サーバーとともに認証が実行されます。チケットが認証されたら、Sande のロールは sampleAppA
に戻され、承認が実行されます。Sande は all
ロールを持っているため、sampleAppA/secure/hello.html
にアクセスできます。Sande が sampleAppB/secure/hello.html
にアクセスする場合も同じ処理が発生します。all
ロールを持っているため、アクセスが許可されます。Andrea と Betty にも同じ処理が発生しますが、Andrea は sampleAppA/secure/hello.html
のみにアクセスでき、sampleAppB/secure/hello.html
にはアクセスできません。Betty はこの逆で、sampleAppB/secure/hello.html
のみにアクセスでき、sampleAppA/secure/hello.html
にはアクセスできません。Chuck は sampleAppA/secure/hello.html
または sampleAppB/secure/hello.html
の認証に成功しますが、ロールを持たないためどちらにもアクセスできません。
オフィスのネットサークに接続する個人のラップトップなど、Sande が Kerberos でセキュア化されていないコンピューターから sampleAppA/secure/hello.html
にアクセスしようとすると、フォールバックとして FORM
ログインページに転送されます。Sande のクレデンシャルはフォールバックの認証を使用して認証され、承認の処理が続行されます。