第26回Alfresco勉強会
Alfresco Community 5.0でSSOを設定する
2015/02/18
@_tasky
自己紹介
私は…
◦ @_tasky
日頃は…
◦ 株式会社イージフでAlfrescoやLiferayをいじってます
◦ 2児(4歳♀, 1歳♀)の父親業やってます
Contents
SSOとは
SSOの主要な実現方式
Alfrescoが対応するSSO
SSOを設定してみよう
テストしてみよう
SSOとは
SSO = Single Sign-On (シングルサインオン)
◦ 一度の認証処理によって複数のシステムへのアクセスを可能にする認証機構
◦ ID管理と併せて、複数のシステムへ個別にログインする手間を省き、アクセス制御や管理を容易にする
SSO基盤に必要なこと
◦ 認証に必要なID情報を保持する(SSO製品というよりID管理製品の役割)
◦ 認証処理時には対象システムよりも(システム的もしくはソフトウェア的に)前面に立つ
◦ 対象システムのログイン処理もしくは認証処理自体を肩代わりする
SSOとは
代表的な製品
◦ OpenAM
◦ CAS (Central Authentication Service)
◦ HP IceWall
◦ RSA Access Manager
◦ CA SiteMinder
◦ IBM Tivoli Access Manager
SSOの主要な実現方式
1. エージェント型
エンドユーザ
システムA
システムB
システムC
ログイン
SSOシステムに認証を委譲する
ID情報
認証の委譲
アクセス
アクセス
SSOシステム
エージェント
エージェント
エージェント
認証の委譲
認証の委譲
アクセス
SSOの主要な実現方式
2. リバースプロキシ型
エンドユーザ
システムA
システムB
システムC
ログイン
SSOシステムでの認証に成功すると、リバースプロキシがHTTPヘッダにユーザ情報を自動付与する
アクセス
リバースプロキシサーバ(SSO)
ID情報
アクセス
アクセス
SSOの主要な実現方式
3. 代理認証型
エンドユーザ
システムA
システムB
システムC
ログイン
各システムのID情報を自動的に収集/同期する
ID情報
ID情報
ID情報
自動的にログイン
リバースプロキシサーバ(代理認証)
統合ID情報 ID情報収集/統合/同期
自動的にログイン
自動的にログイン
Alfrescoが対応するSSO
NTLMv1 認証 (passthru)
◦ Windowsドメインサーバ(Active Directory)を介した認証
◦ ドメインログインとのSSO
Kerberos認証 (kerberos)
◦ Kerberosレルムを介した認証(主にActive Directory)
◦ ドメインログインとのSSO
外部認証(external)
◦ HTTPヘッダもしくはクッキーに付加された認証済みユーザ情報を使った認証
◦ CAS, OpenAM, その他多数
※詳しくは https://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystemsを参照
※ passthruのSSO設定については http://aegif-labo.blogspot.jp/2014/12/alfresco-50active-directoryntlm-sso.htmlを参照
※その他、比較的簡単なカスタマイズで多様なSSO基盤に対応可能
SSOを設定してみよう
以下のような外部認証に対応するようにAlfrescoを設定してみます
◦ エージェント型もしくはリバースプロキシ型のSSO基盤
◦ 認証済みユーザIDはHTTPリクエストヘッダにパラメータ名X-Test-Remote-User で付与する
※リバースプロキシ型、エージェント型に対応したSSO製品であれば大概このようなSSO仕様に対応可能
エンドユーザ Alfresco
ログイン アクセス
リバースプロキシサーバ(SSO)
HTTPリクエストヘッダに
X-Test-Remote-User=<UserID>
が付与される
SSOを設定してみよう
<tomcat_dir>/shared/classes/alfresco-global.properties
◦ 以下の設定を追加(グレーの箇所は追加しなくてもOK)
authentication.chain :認証チェーン。外部認証を追加する(external1はデフォルトで定義されている外部認証用の設定)
external.authentication.proxyUserName :このプロパティを空に設定すると、external.authentication.proxyHeaderで指定したHTTPヘッダパラメータの値をユーザ名として利用する
external.authentication.proxyHeader :ユーザIDを指定するHTTPヘッダパラメータ名
external.authentication.defaultAdministratorUserNames :
external.authentication.enabled : 外部認証を有効にするか否か。デフォルトでtrue
external.authentication.userIdPattern : HTTPヘッダパラメータからユーザIDを抽出するための正規表現
※詳しくは http://docs.alfresco.com/4.0/concepts/auth-external-props.htmlを参照のこと
# for ssoauthentication.chain=external1:external,alfrescoNtlm1:alfrescoNtlmexternal.authentication.proxyUserName=external.authentication.proxyHeader=X-Test-Remote-Userexternal.authentication.defaultAdministratorUserNames=adminexternal.authentication.enabled=trueexternal.authentication.userIdPattern=
SSOを設定してみよう <tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml
◦ 既存のremote設定をコメントアウトし、以下の内容を追加(orアンコメント)
◦ userHeader : alfresco-global.propertiesで指定したHTTPヘッダパラメータ名
◦ connector-id : alfrescoHeaderを指定
<config evaluator="string-compare" condition="Remote"><remote>
<keystore><path>alfresco/web-extension/alfresco-system.p12</path><type>pkcs12</type><password>alfresco-system</password>
</keystore><connector>
<id>alfrescoCookie</id><name>Alfresco Connector</name><description>Connects to an Alfresco instance using cookie-based authentication</description><class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class>
</connector><connector>
<id>alfrescoHeader</id><name>Alfresco Connector</name><description>Connects to an Alfresco instance using header and cookie-based authentication</description><class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class><userHeader>X-Test-Remote-User</userHeader>
</connector><endpoint>
<id>alfresco</id><name>Alfresco - user access</name><description>Access to Alfresco Repository WebScripts that require user authentication</description><connector-id>alfrescoHeader</connector-id><endpoint-url>http://localhost:8080/alfresco/wcs</endpoint-url><identity>user</identity><external-auth>true</external-auth>
</endpoint></remote>
</config>
テストしてみよう
SSO基盤がある場合
◦ エージェントをAlfrescoのTomcatにインストールし、認証済みユーザIDをHTTPヘッダに付加するよう設定する
◦ もしくは、プロキシサーバで認証済みユーザIDをHTTPヘッダに付加するよう設定する
SSO基盤がない場合
◦ ブラウザのアドオン等を利用して上記の状況を模擬する
Chrome : ModHeader (http://goo.gl/HWQzg)
Firefox : Modify Headers (http://goo.gl/CZjaL)
1. ユーザadminでログイン(もしくはアドオンでX-Test-Remote-User=adminをHTTPヘッダに追加)
2. Alfresco (http://<サーバIP>:<ポート>/share) にアクセスし、ログイン画面がスキップされてダッシュボードが表示されればOK
うまくいかないときは…
ログを確認してみよう
◦ <tomcat_dir>/webapps/share/WEB-INF/classes/log4j.properties に以下の内容を追加
log4j.logger.org.alfresco.web.site.servlet=debug
◦ Alfresco起動時、アクセス時にログが出力されるようになる
アクセスの度にログが出力されるのでログ肥大化に注意!
DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] Initializing the SSOAuthenticationFilter.DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] Endpoint is alfrescoDEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] userHeader is X-Test-Remote-UserINFO [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] SSOAuthenticationFilter initialised.
...
DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Processing request /share/page/ SID:xxxxxxxxxxDEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Touching the repo to ensure we still have an authenticated session.DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Validating repository session for test1DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Accept-Language header present: ja,en-US;q=0.8,en;q=0.6DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Authentication not required, chaining ...
まとめ
SSOとは
SSOの主要な実現方式
Alfrescoが対応するSSO
AlfrescoのSSO設定