CAS (Single Sign On) kurulumu
Kurulmasl bir çok sistemde kullanıcı doğrulamaları gerekmektedir ve bunu tek şifre ile tek merkezden idare etmek de önemli. Single Sign On (SSO) bu tip gereksinimlerde tek yerden kullanıcı doğrulaması alınması için kullanılıyor.
Özellikle büyük networklerde bütün ağın toplandığı noktalara ek sistemler kurmak tüm ağı yavaşlatabilir. Bunun için networklerde switch konfigurasyonu ile SSO kullanmak en mantıklı çözüm olarak görünüyor. Böylece doğrulma iş yükü her bir network cihazına yıkılıyor ve ağın yavaşlaması gibi durum ortadan kalkıyor. Ayrıca doğrulama almadan da ağa girmek imkansız hale geliyor.
Bu yazıda da özellikle kurulumu sırasında zorluk yaşadığım APEREO’ya ait CAS (Central Authentication Service) yazılımını kurmayı ve LDAP ile doğrulama alınmasını anlatacağım.
CAS dökümantasyonu ve desteği oldukça sıkıntılı geldi bana, bu yüzden türkçe bir kaynak da bulunsun istedim.
İşletim sistemi olarak Ubuntu 14.04 x64 kuruyoruz. Bunun üzerine Apache Tomcat7 kuruyoruz.
sudo apt-get install tomcat7
İşletim sistemi ve web sunucumuz hazır.
Şuradaki CAS Overlay’i indirip Maven ile kuracağız.
https://github.com/apereo/cas-overlay-template
zip dosyasını indirip ftp ile veya wget ile sunucuya bir şekilde indiriyoruz ardından zip’ten dosyaları çıkarıyoruz.
cd cas-overlay-template-master
ile klasörün içine giriyoruz. mvnw ile projenin oluşturulmasını başlatıyoruz.
mvnw clean package
Burada işlem biraz uzun sürüyor. Sağdan soldan topladığı paketlerle CAS.war dosyasını hazırlıyor.
Ve işlem bitince Tomcat’te çalıştıracağımız war dosyası target klasörünün altında bizi bekliyor olacak.
cp target/cas.war /var/lib/tomcat7/webapps/
cas.war dosyasını tomcat’a yolladık şimdi tomcat7’yi yeniden başlatalım.
sudo service tomcat7 restart
* Stopping Tomcat servlet engine tomcat7 [ OK ] * Starting Tomcat servlet engine tomcat7 [ OK ]
İkinci [ OK ] göründükten sonra tomcat cas.war’i işlemeye başlıyor. Bu yüzden hemen görünmüyor bir süre beklemek gerekli.
http://sunucuadresi:8080/cas adresini açıyoruz ve CAS’a ait ekran gelmiş olmalı. Gelmediyse yukarıdaki işlemleri hatasız yaptınız mı kontrol edin.
Cas geldi ama “Non-secure Connection” hatası görünüyor?
https yani ssl kurulu olmadığı için sizi uyarıyor, /var/lib/tomcat7/webapps/cas/WEB-INF/view/jsp/default/ui/casLoginView.jsp dosyasında aşağıdaki satırları silerseniz uyarı kaybolur. SSL kullanıyorsanız zaten gerek kalmaz.
<c:if test="${not pageContext.request.secure}"> <div id="msg" class="errors"> <h2>Non-secure Connection</h2> <p>You are currently accessing CAS over a non-secure connection. Single Sign On WILL NOT WORK. In order to have single sign on work, you MUST log in over HTTPS.</p> </div> </c:if>
Bu hata da gitti. Sırada can alıcı konfigurasyonlar var.
/var/lib/tomcat7/webapps/cas/WEB-INF/deployerConfigContext.xml dosyasını açıyoruz.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:ldaptive="http://www.ldaptive.org/schema/spring-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.ldaptive.org/schema/spring-ext http://www.ldaptive.org/schema/spring-ext.xsd "> <util:map id="authenticationHandlersResolvers"> <entry key-ref="ldapAuthenticationHandler" value-ref="primaryPrincipalResolver" /> <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /> <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> </util:map> <util:list id="authenticationMetadataPopulators"> <ref bean="successfulHandlerMetaDataPopulator" /> <ref bean="rememberMeAuthenticationMetaDataPopulator" /> </util:list> <ldaptive:bind-search-authenticator id="authenticator" ldapUrl="${ldap.url}" baseDn="${ldap.baseDn}" userFilter="${ldap.authn.searchFilter}" bindDn="${ldap.managerDn}" bindCredential="${ldap.managerPassword}" connectTimeout="${ldap.connectTimeout}" useStartTLS="${ldap.useStartTLS}" blockWaitTime="${ldap.pool.blockWaitTime}" maxPoolSize="${ldap.pool.maxSize}" allowMultipleDns="${ldap.allowMultipleDns:false}" usePasswordPolicy="${ldap.usePpolicy:false}" minPoolSize="${ldap.pool.minSize}" validateOnCheckOut="${ldap.pool.validateOnCheckout}" validatePeriodically="${ldap.pool.validatePeriodically}" validatePeriod="${ldap.pool.validatePeriod}" idleTime="${ldap.pool.idleTime}" prunePeriod="${ldap.pool.prunePeriod}" failFastInitialize="true" subtreeSearch="${ldap.subtree.search:true}" useSSL="${ldap.use.ssl:false}" /> <bean id="ldapAuthenticationHandler" class="org.jasig.cas.authentication.LdapAuthenticationHandler" p:principalIdAttribute="uid" c:authenticator-ref="authenticator" /> <bean id="attributeRepository" class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao" p:backingMap-ref="attrRepoBackingMap" /> <alias name="acceptUsersAuthenticationHandler" alias="primaryAuthenticationHandler" /> <alias name="personDirectoryPrincipalResolver" alias="primaryPrincipalResolver" /> <util:map id="attrRepoBackingMap"> <entry key="uid" value="uid" /> <entry key="eduPersonAffiliation" value="eduPersonAffiliation" /> <entry key="groupMembership" value="groupMembership" /> <entry> <key><value>memberOf</value></key> <list> <value>faculty</value> <value>staff</value> <value>org</value> </list> </entry> </util:map> <alias name="serviceThemeResolver" alias="themeResolver" /> <alias name="jsonServiceRegistryDao" alias="serviceRegistryDao" /> <alias name="defaultTicketRegistry" alias="ticketRegistry" /> <alias name="ticketGrantingTicketExpirationPolicy" alias="grantingTicketExpirationPolicy" /> <alias name="multiTimeUseOrTimeoutExpirationPolicy" alias="serviceTicketExpirationPolicy" /> <alias name="anyAuthenticationPolicy" alias="authenticationPolicy" /> <alias name="acceptAnyAuthenticationPolicyFactory" alias="authenticationPolicyFactory" /> <bean id="auditTrailManager" class="org.jasig.inspektr.audit.support.Slf4jLoggingAuditTrailManager" p:entrySeparator="${cas.audit.singleline.separator:|}" p:useSingleLine="${cas.audit.singleline:false}"/> <alias name="neverThrottle" alias="authenticationThrottle" /> <util:list id="monitorsList"> <ref bean="memoryMonitor" /> <ref bean="sessionMonitor" /> </util:list> <alias name="defaultPrincipalFactory" alias="principalFactory" /> <alias name="defaultAuthenticationTransactionManager" alias="authenticationTransactionManager" /> <alias name="defaultPrincipalElectionStrategy" alias="principalElectionStrategy" /> <alias name="tgcCipherExecutor" alias="defaultCookieCipherExecutor" /> </beans>
Yukarıda kalın yaparak işaretlediğim satırlara dikkat edin. Onlar yeni kurulmuş bir deployerConfigContext.xml dosyasında yok. İsterseniz seçip tek tek ekleyin isterseniz bu dosyayı olduğu gibi kullanın.
Not: CAS’ın kendi dökümantasyonunda geçen sAMAaccount değişken kafamı çok karıştırdı. Bu değişken LDAP’ta kullanıcı adının eşleştiği attribute olacak. Örneğin biz uid kullanıyoruz.
Gelelim /etc/cas/cas.properties dosyasına. Bu dosya çok uzun olduğu için sadece en sona eklenmesinin yeterli olacağı satırları veriyorum.
# http://apereo.github.io/cas/4.2.x/installation/LDAP-Authentication.html#ldap-supporting-direct-bind #======================================== # General properties #======================================== ldap.url=ldap://ldap.sunucu.adresi:389 # Start TLS for SSL connections ldap.useStartTLS=false # Directory root DN ldap.rootDn=dc=usak,dc=edu,dc=tr # Base DN of users to be authenticated ldap.baseDn=dc=usak,dc=edu,dc=tr # LDAP connection timeout in milliseconds ldap.connectTimeout=3000 # Manager credential DN ldap.managerDn=cn=admin,dc=usak,dc=edu,dc=tr # Manager credential password ldap.managerPassword=Sifre123 #======================================== # LDAP connection pool configuration #======================================== ldap.pool.minSize=1 ldap.pool.maxSize=100 ldap.pool.validateOnCheckout=true ldap.pool.validatePeriodically=true # Amount of time in milliseconds to block on pool exhausted condition # before giving up. ldap.pool.blockWaitTime=3000 # Frequency of connection validation in seconds # Only applies if validatePeriodically=true ldap.pool.validatePeriod=300 # Attempt to prune connections every N seconds ldap.pool.prunePeriod=300 # Maximum amount of time an idle connection is allowed to be in # pool before it is liable to be removed/destroyed ldap.pool.idleTime=600 #======================================== # Authentication #======================================== ldap.authn.searchFilter=uid={user} # Ldap domain used to resolve dn ldap.domain= # Should LDAP Password Policy be enabled? ldap.usePpolicy=true # Allow multiple DNs during authentication? ldap.allowMultipleDns=false
LDAP konfigurasyonu da hazır. Tomcat’i yeniden başlatarak http://sunucuadresi:8080/cas adresinden -kendine gelmesini bekleyin- giriş yapmayı deneyebilirsiniz.
Sonuç:
Bir cevap yazın