Confluence a sprawa SSO

Praca w korpo czasem daje możliwość ze zmierzeniem się z czymś „innym”, tym razem padło na poprawne skonfigurowanie mechanizmu SSO dla aplikacji Confluence.
Po krótce sprawa miała się tak – był stary Confluence (3) siedzący za Apachem na Windows Server, teraz mamy nowego Conflu (5/6) nadal za apachem na Windowsie 🙂
Apache służy jako router dla wielu aplikacji kierując ruch na odpowieni port w zależności jaka domena uderzy do niego.


Zatem zaczynając od początku:

Apache (2.2.8):

httpd.conf:

Całość sprowadza się do aktywacji odpowiednich modułów, konfiguracji jk_module i wskazania konfiguracji vhostów.

Listen 80
 
...
 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule sspi_auth_module modules/mod_auth_sspi.so
 
...
 
# Load mod_jk module
# Update this path to match your modules location
LoadModule    jk_module  modules/mod_jk.so
 
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile "conf/workers.properties"
 
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile     "conf/mod_jk.shm"
 
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     "logs/mod_jk.log"
 
# Set the jk log level [debug/error/info]
JkLogLevel    error
 
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
 
# Send everything for context /examples to worker named worker1 (ajp13)
JkEnvVar REMOTE_USER
 
...
 
# Virtual hosts
Include conf/vhosts.conf
vhosts.conf:

Konfiguracja vhostów w tym przypadku mówi nam jak apache ma się zachować w przypadku wejścia z konkretnej domeny. Aby mechanizmy związane z SSO nie psuły nam innych vhostów część konfiguracji jk i SSPI znajduje się tutaj.

NameVirtualHost *:80
<VirtualHost *:80>
	ServerAdmin confluence.domain
	ServerName confluence.domain
	<Directory "/">
		Order allow,deny
		Allow from all
	</Directory>
	ErrorLog "logs/conf-error.log"
	CustomLog "logs/conf-access.log" common
	<IfModule mod_jk.c>
		JkMount  /* worker1
		JkOptions     +ForwardURICompatUnparsed
		JkLogFile     "logs/conf-mod_jk.log"
		JkLogLevel    error
		JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
	</IfModule>
	<Location />
		AuthType SSPI
		AuthName "Confluence (domain logon)"
		SSPIAuth On
		SSPIAuthoritative On
		SSPIPerRequestAuth On 
		SSPIOmitDomain On
		SSPIDomain DOMAIN
		SSPIOfferBasic On
		Require valid-user
	</Location>
</VirtualHost>
workers.properties:
# Define 1 real worker using ajp13
worker.list=worker1
 
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=1234

Confluence (5.10):

conf\server.xml:
<Server port="8000" shutdown="SHUTDOWN" debug="0">
    <Service name="Tomcat-Standalone">
 
	...
 
	<Connector port="1234" minSpareThreads="5" maxThreads="256" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" tomcatAuthentication="false" URIEncoding="UTF-8"/>
confluence\WEB-INF\classes\seraph-config.xml:

Wymagane jest aby nasz Confluence miał w folderze confluence\WEB-INF\lib plik JAR z Seraph’em od pixelpark’a – link do maven’a.

<security-config>
	...
 
	<!-- Custom authenticators appear below. To enable one of them, comment out the default authenticator above and uncomment the one below. -->
	<authenticator class="com.pixelpark.seraph.confluence.SSOAuthenticator"/>
 
	...
</security-config>

Windows Server:

Group Policy Editor

Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Access this computer from the network – dodajemy grupę która ma mieć dostęp przez SSO (Authenticated Users – da wszystkim użytkownikom którzy mogą się logować na tej maszynie).

I to by było na tyle 🙂
Teraz przy każdorazowym wejściu na adres Confluenca powinniśmy natychmiastowo być zalogowani o ile istnieje na nim nasze konto o identycznej nazwie jak w domenie. Konfigurację LDAP’a zostawiam na inny termin.