Alfresco勉強会#26 alfresco community 5.0でssoを設定する

Post on 21-Jul-2015

1.761 views 9 download

Transcript of Alfresco勉強会#26 alfresco community 5.0でssoを設定する

第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設定