EAP6: Non-Clustered SSO

渡邊です。こんにちは。

EAP6の研究をしています。
備忘録を兼ねて、シングルサインオン(以下、SSO)についてハマったことを記します。
本記事で扱うのは、同一サーバインスタンス内で実行するWebアプリケーションのSSOです。

こちらの開発者ガイドを参考にしました。

web.xml を編集する

EAP6の仕組みを利用したSSOには、<コンテナ管理による認証のみ>という制限があります。
SSOに参加する全てのWebアプリケーションについて、web.xmlを次のように編集します。

<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <security-constraint>
        <display-name>Security Constraint on Conversation</display-name>
        <web-resource-collection>
        <web-resource-name>examplesWebApp</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>guest</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>ApplicationRealm</realm-name>
        <form-login-config>
            <form-login-page>/login.html</form-login-page>
            <form-error-page>/error.html</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
        <role-name>guest</role-name>
    </security-role>
</web-app>

jboss-web.xml を編集する

SSOバルブの設定を記します。開発者ガイドには、クラスタ化されたSSOが例として示されています。
ClusteredSingleSignOnの代わりにSingleSignOnを設定します。
security-domainは、適宜変更してください。SSOに参加する全てのWebアプリケーションについて、同一のセキュリティドメインを設定する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
   <security-domain>other</security-domain>

   <valve> 
     <class-name>org.apache.catalina.authenticator.SingleSignOn</class-name>
   </valve>

</jboss-web>

org.apache.catalina.authenticator.SingleSignOnにビルドパスが通っていない場合は、pom.xmlに次の依存関係を追加します。

<dependency>
    <groupId>org.jboss.web</groupId>
    <artifactId>jbossweb</artifactId>
    <version>7.0.17.Final-redhat-1</version>
    <scope>provided</scope>
</dependency>

standalone.xml または domain.xm を編集するl

virtual-server タグの中に <sso domain=”{YOUR DOMAIN}” reauthenticate=”false”/> を追加します。
reauthenticate のディフォルト値は、trueです。すると、ユーザが(SSOに参加している)新たなアプリケーションにアクセスする度に、改めて認証手続きをする必要があります(FORM認証であれば、認証FORM画面に遷移します)。つまり、見かけ上SSOが機能していないようにみえます。この設定が開発者ドキュメントに載っておらず、ハマりました。
詳細はこちら

<subsystem xmlns="urn:jboss:domain:web:1.2" default-virtual-server="default-host" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="true">
        <alias name="localhost"/>
        <!-- <sso domain="localhost" reauthenticate="false"/> -->
        <sso domain="watanabe.com" reauthenticate="false"/>
    </virtual-server>
</subsystem>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です