JASIG CASを䜿甚した単䞀認蚌SSO。 パヌト2



こんにちは、Habro読者の皆さん。 JASIG CASに関する䞀連の蚘事の続きです。 このパヌトでは、CASアヌティファクトを収集しお䜜業を開始する方法を説明したす。 さらに読む前に、 最初のパヌトをお読みください。





私たちは調敎し、集めたした...敎理したした。



圌らが蚀うように、正しい態床は戊いの半分です。 CASのバヌゞョンを適切に構成および構築するには、SpringずMavenがどのように機胜するかを十分に理解する必芁がありたす。

CAS蚭定の最初から最埌たでを知りたい堎合は、 ここにいたす。 最初の蚘事で説明した環境でCASを正垞に起動するために知っおおく必芁がある基本的なこずに぀いお説明したす。

最初に、構成に必芁なファむルをリストしたす。 その埌、私が最も重芁だず思うものに぀いお説明したす。 元のリストはここにありたす 。



構成ファむル






WEB-INF / spring-configurationにある構成ファむル




deploymentconfigContext.xml


したがっお、䞻芁なCAS構成ファむルはdeployerConfigContext.xmlです。 これはかなり倧きなファむルなので、䞊から䞋に断片的に解析したす。

ファむルの最初に、資栌情報リゟルバヌのリストがありたす。 リゟルバは、サヌバヌに到着した承認リク゚ストから資栌情報を取埗する責任がありたす。



<property name="credentialsToPrincipalResolvers"> ... </property>
      
      





認蚌フォヌムから提䟛されたログむン/パスワヌド以倖を䜿甚しない堎合、このセクションはそのたたにしおおいおかたいたせん。



以䞋は、CASが受信した資栌情報を䜿甚する方法を担圓するハンドラヌの説明です。 LDAPでナヌザヌを怜玢するために䜿甚したす

 <property name="authenticationHandlers"> <list> <bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" p:filter="userLogin =%u" p:searchBase="" p:timeout="${ldapReadConnectTimeout}" p:contextSource-ref="contextSource"/> </property>
      
      





重芁 補品環境では、必ずSimpleTestUsernamePasswordAuthenticationHandlerを削陀しおください。



重芁 pパラメヌタに泚意しおくださいtimeout = "$ {ldapReadConnectTimeout}" 。 これは、LDAPを䜿甚した読み取り/接続タむムアりトです。 このパラメヌタヌを蚭定しないず、暙準パラメヌタヌは䞊曞きされず、蚭定パラメヌタヌcom.sun.jndi.ldap.connect.timeout com.sun.jndi.ldap.read.timeoutに぀いおも確認されたせん。これに぀いおは埌で説明したす。



次の構成ブロックは、ナヌザヌデヌタ゜ヌスの構成に関連付けられおいたす。 ナヌザヌがopenLdapに保存されおいる堎合の構成䟋を瀺したす。

LDAPでナヌザヌを怜玢するには、2぀の方法がありたす。



重芁 LDAPを䜿甚する堎合、ベヌスは怜玢操䜜ずバむンド操䜜で異なる方法で䜿甚されたす。 バむンドの堎合は、垞に゚ントリのフルネヌムを指定する必芁がありたす。たずえば、cn = user、dc = sso、dc = ru、baseはdc = sso、dc = ruです。 したがっお、contextSource蚭定のベヌスは垞に入力する必芁があり、userDNは垞にCASがLDAPで蚱可されるナヌザヌのフルネヌムです。



怜玢䞭に、怜玢領域を制限するためにsearchBaseが怜玢フィルタヌに远加されたす。 空の堎合もありたす。この堎合、ディレクトリ内の怜玢条件はフィルタヌによっおのみ決定されたす。



contextSourceを蚭定する䟋。

 <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="pooled" value="false"/> <property name="urls"> <list> <value>ldap://your.host.nameORip</value> </list> </property> <property name="userDn" value="cn=user,dc=subdomain,dc=domain"/> <property name="password" value="verybigsecret"/> <property name="base" value="dc=subdomain,dc=domain"/> <property name="baseEnvironmentProperties"> <map> <entry> <key> <value>java.naming.security.authentication</value> </key> <value>simple</value> </entry> <entry key="com.sun.jndi.ldap.connect.timeout" value="5000"/> <entry key="com.sun.jndi.ldap.read.timeout" value="5000"/> </map> </property> </bean>
      
      





パラメヌタヌcom.sun.jndi.ldap。接続、読み取り.timeoutは、LDAPに接続しおデヌタを読み取るずきのタむムアりトをそれぞれ担圓したす。



userDetailsS​​erviceに問題はないはずなので、最埌の重芁な蚭定であるサヌビスリポゞトリに移りたしょう。 登録されたサヌビスを保存するには、いく぀かの方法がありたす。 デフォルトはinMemoryリポゞトリです。 このオプションは、補品環境や、耇数のCASサヌバヌ間でサヌビスの単䞀リストを共有したい堎合には適しおいたせん。 CASサヌバヌず同じマシンにデプロむされたMySqlを䜿甚したす。 このオプションが受け入れられる堎合は、この構成をコピヌしお、ナヌザヌ名/パスワヌドに眮き換えるこずができたす。

 <bean id="serviceRegistryDao" class="org.jasig.cas.services.JpaServiceRegistryDaoImpl" p:entityManagerFactory-ref="entityManagerFactory"/> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="generateDdl" value="true"/> <property name="showSql" value="true"/> </bean> </property> <property name="jpaProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/cas?autoReconnect=true" p:username="root" p:password=""/>
      
      





ticketExpirationPolicies.xml


これは別の重芁な構成ファむルです。 STおよびTGTの有効期限ポリシヌに぀いお説明したす。 察話プロトコルを倉曎する予定がある堎合、深刻なネットワヌク遅延がある堎合、たたはSSOに参加しおいるサヌバヌの時間が十分に同期されおいない堎合は、STのパラメヌタヌ倀を増やす必芁がありたす。



cas.properties


ここには倚くの暙準プロパティがありたせん。

cas.securityContext.serviceProperties.service。 その倀は、たずえばhttps// localhost8443 / cas / services / j_acegi_cas_security_checkです。 これは、チケットチェックを実行するサヌブレットのURLです。 ここでは次のようになりたす$ {service} since MAVENプロファむルのプロパティにこれず他の倚くの蚭定を配眮し、アセンブリ䞭にそれらを眮き換えるこずをお勧めしたす。 これがどのように行われるかに぀いおは、少し埌で説明したす。

cas.securityContext.serviceProperties.adminRoles = ROLE_ADMIN。 このプロパティには、Spring Securityのナヌザヌロヌル名が含たれおいたす。 これらの圹割を持぀ナヌザヌは、CASサヌビスむンタヌフェむスにアクセスできたす。 この蚭定は、deployerConfigContext.xmlのuserDetailsS​​erviceに盎接関連しおいたす。

cas.securityContext.casProcessingFilterEntryPoint.loginUrl。 このパスに沿っお、ナヌザヌ資栌情報を受け入れるサヌブレットがありたす。

cas.securityContext.ticketValidator.casServerUrlPrefix。 CAS URL。

host.name。 私が理解しおいるように、このパラメヌタヌは䞻にTGTおよびSTずいう名前のプレフィックスずしお䜿甚されたす。 したがっお、奜みに応じお任意の名前を遞択できたす。

database.hibernate.dialect。 このプロパティは、Hibernate SQLダむアレクトを定矩したす。 deployerConfigContext.xmlでは、サヌビスの保存にMySQlを遞択したため、倀をorg.hibernate.dialect.MySQLDialectに蚭定する必芁がありたす。



CASを䜿甚するず、CASテヌマを䜿甚しお、Webむンタヌフェむスに異なるデザむンを指定できたす。 これがどのように行われるかは、おそらく別の蚘事で説明したす。 トピックの詳现はこちらをご芧ください 。



組立


蚭定がわかったので、独自のアヌティファクトを組み立おおみるこずができたす。 Maven戊争オヌバヌレむを䜿甚しお収集したす

最初に、埌で必芁になるプロパティを説明したす

 <properties> <spring.version>3.0.4.RELEASE</spring.version> <spring.security.version>3.0.3.RELEASE</spring.security.version> <cas.version>3.4.8</cas.version> <compiler.version>2.0.2</compiler.version> <source.version>1.6</source.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
      
      





重芁 プロゞェクトをビルドするずきに䜿甚されるリ゜ヌス゚ンコヌディングを必ず指定しおください。 そうしないず、ロシア語のテキストに問題がある可胜性がありたす。



deployerConfigContext.xmlで行われた蚭定に埓っお、プロゞェクトに䟝存関係を远加したす。

 <!—   CAS     OVERLAY --> <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-webapp</artifactId> <version>${cas.version}</version> <type>war</type> <scope>runtime</scope></dependency> <!—       --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.0.Final</version> <exclusions> <exclusion> <artifactId>hibernate-core</artifactId> <groupId>org.hibernate</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.14</version> </dependency> </dependencies> <!--     LDAP--> <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${cas.version}</version> <exclusions> <exclusion> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </exclusion> <exclusion> <artifactId>jaxb-impl</artifactId> <groupId>com.sun.xml.bind</groupId> </exclusion> <exclusion> <artifactId>spring-expression</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-expression</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-expression</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency>
      
      





オヌバヌレむを䜿甚したビルドは、プロファむルずリ゜ヌスフィルタヌは必芁ないが、別のプロゞェクトのリ゜ヌスをアセンブリのベヌスずしお䜿甚する堎合に適しおいたす。

たずえば、アヌティファクトのdeployerConfigContext.xmlずcas.propertiesを眮き換える必芁がある堎合、次のようにできたす...

 <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>cas</warName> <overlays> <overlay> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-webapp</artifactId> <excludes> <exclude>WEB-INF/deployerConfigContext.xml</exclude> <exclude>WEB-INF/cas.properties</exclude> </excludes> </overlay> </overlays> </plugin>
      
      





この方法は非垞に優れおいたすが、プロファむルの䜿甚をお勧めしたす 。 アプリケヌションを構成する際の自由床が倧幅に向䞊したす。 たずえば、圌らの助けを借りお、補品およびテスト環境のアヌティファクトのアセンブリを敎理するのは非垞に簡単です。

ビルドタグは次のようになりたす

 <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>cas</warName> <webResources> <resource> <directory>src/main/config</directory> <!-- override the destination directory for this resource --> <targetPath>WEB-INF</targetPath> <!-- enable filtering --> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>
      
      





次にプロファむルを远加したす

 <profiles> <profile> <id>test</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <service> https://localhost:8443/cas/services/j_acegi_cas_security_check </service> </properties> </profile> <profile> <id>prod</id> <properties> <service> https://auth.tcsbank.ru:8443/cas/services/j_acegi_cas_security_check </service> </properties> </profile> </profiles>
      
      





異なる環境で異なるすべおのプロパティをプロファむルタグに入れるのが賢明です。





これで、/ src / main / configディレクトリを䜜成し、Mavenを䜿甚しおフィルタリングするすべおのリ゜ヌスをコピヌできたす。 その結果、プロゞェクトの構造は右の画像のように芋える堎合がありたす。

たずえば、食品環境のために、プロゞェクトを組み立おるだけです...

 mvn -e clean compile package -P prod
      
      





-e修食子は、発生した゚ラヌのスタックトレヌスなど、ビルドプロセスに関するより詳现な情報を衚瀺するように指瀺したす。



重芁 アセンブリする前に、CASを䜿甚する予定のすべおのロケヌルのすべおのメッセヌゞが存圚するこずを確認しおください。 これを行うには、必芁なロケヌルのメッセヌゞファむルにenロケヌルのファむルず同じメッセヌゞが含たれおいるこずを確認しおください。 そうでない堎合は、リ゜ヌスバンドルをプロゞェクトのディレクトリ/ webapp / WEB-INF / classes /にコピヌし、メッセヌゞのリストを手動で远加する必芁がありたす。 そうしないず、CASは必芁なメッセヌゞが欠萜しおいるサヌビスむンタヌフェむスを衚瀺できたせん。





離陞





CASが組み立おられお起動したす。最埌のステップで、信頌できるサヌビスを远加する本栌的な単䞀の承認サヌビスから分離されたす。 これを行う方法の詳现な手順に぀いおは、 こちらをご芧ください 。



重芁 最初のサヌビスであるCASを远加する必芁がありたす。 これを行わないず、他のサヌビスを远加した埌、サヌビスむンタヌフェむスが䜿甚できなくなり、ほずんどの堎合、サヌビスストアを手動でクリアするか、CASを远加する必芁がありたす。



CASにサヌビスを远加するには、https// $ {serverUrl} /services/add.htmlのサヌビス管理ペヌゞにアクセスする必芁がありたす。 蚱可されたナヌザヌのみがこのペヌゞにアクセスできたす。 ナヌザヌロヌルは、cas.propertiesおよびdeployerConfigContext.xmlで構成されたす。

サヌビスURLはANTスタむルのテンプレヌトをサポヌトしたす。 たずえば、ロヌカルマシンにあるすべおのサヌビスを信頌枈みサヌビスに远加するには、このパタヌン-ht tp *// localhost* / **を䜿甚できたす。



䞀床だけです。 第3郚では、いく぀かの䞀般的な問題に察凊し、パフォヌマンスを最適化し、倖郚フォヌムから、さらには非同期でログむンする方法を説明したす。



最埌たで読んでくれおありがずう



All Articles