Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring security


Автор: Samotnik 22.9.2009, 11:05
Есть приложение, поднятое на Спринге, на данный момент там реализован Spring - Security для одного приложения, назовем его  first.war, все говорят, что для first.war при логине создается  Тикет.   
Так вот мне нужно написать для приложения second.war такой же тикет  smile  , какой уже существует для first.war Но не знаю с чего начинать smile 
Подскажите плиз, чего почитать по этому поводу. 

Со спрингом более- менее знаком, со  Спринг - Секьюрити  нет smile 
Может есть доки доступно обьясняющие что к чему ?

Автор: MisterCleric 22.9.2009, 11:20
Привет
Цитата

все говорят, что для first.war при логине создается  Тикет.

О чем идет речь? Кто говорит? И что за тикет такой?

Автор: Samotnik 22.9.2009, 11:30
ну вот я тоже не особо представляю о чем речь smile ПОэтому на форуме и решил спросить smile
Вот вобщем есть такой таск (он был на немецком, я гуглом на инглиш перевел  smile ):
Цитата

The first.war does not support SSE, d, h, we need passwords and the need to SSO login immediately obtain an additional ticket from first.war.

Автор: garbuz 22.9.2009, 18:18
Цитата(Samotnik @  22.9.2009,  11:05 Найти цитируемый пост)
все говорят, что для first.war при логине создается  Тикет.

Может имеется ввиду какой-то объект, который при логине создается? Исходники первого приложения есть?

Автор: Samotnik 22.9.2009, 21:28
нету сырцов smile 
в этом и проблема. Ну ничего подожду - потом посмотрю, мот разберусь, что за  тикеты такие  smile 

Автор: MisterCleric 22.9.2009, 21:58
Цитата

нету сырцов

Да хоть spring-security.xml то есть7
Давай его сюда: посмотрим

Автор: _sten_ 23.9.2009, 23:52
http://en.wikipedia.org/wiki/Single_sign-on - single sign on

Как я понял нужно прикрутить SSO к твоей апликухе. Тоесть если залогинился в first.war то в second.war уже логинится не надо...
"Тикет" это что то типа обьекта сессии который выдает SSO сервер.

Автор: MisterCleric 24.9.2009, 09:46
Цитата

Тоесть если залогинился в first.war то в second.war уже логинится не надо...


О! Вот это интересно. С удовольствием почитаю возможные решения. Часто бывает такая задача... Но пока не решенная

Автор: _and 24.9.2009, 09:56
MisterCleric, по SSO для java и не только, можно посмотерть этот проектег http://www.jasig.org/cas
у Oracle AS тоже есть реализация SSO

Автор: MisterCleric 24.9.2009, 10:09
_and, 
Цитата

по SSO для java и не только, можно посмотерть этот проектег CAS

Спасибо, а меня интересует для JBOSS. Ну можно методами Spring. Хотя в доке о Spring-Security что о CAS видел.... Почитаю.
Еще раз спасибо.
А в двух словах можно как оно работает?

Автор: _sten_ 24.9.2009, 23:05
CAS ставится как отдельный сервер. Каждый засекюреный сервер настраиваетс таким образом что при первом обращении идет редирект на CAS, где юзер логинится и редиректися обратно. Юзер получает тикет, в браузере сохраняется айди этого тикета в crossdomain cookies. Если юзер преходит на другой засекюреный сервер, то сервер обращается к CAS серверу с айдишником тикета и получает тот же тикет обратно. Таким образом второй раз логинится не надо. Вобщем тикет шарится между несколькими серверами.

У спринга есть интеграция с CAS, на офф сайте даже пример есть

Автор: Samotnik 25.9.2009, 12:38
_sten_,  smile   о ! круто !  то что нужно !!! 
Я попрошу, если можно по-подробнее вот про это 
Цитата(_sten_ @  24.9.2009,  23:05 Найти цитируемый пост)
Каждый засекюреный сервер настраиваетс таким образом что при первом обращении идет редирект на CAS

вот у меня как раз именно так работает smile 
Моя задача найти это что-то, что  отвечает за редирект ! Помоги плиз. Это что ?  Это web.xml ?  Или это Бин, или Сервлет, или еще что-то ? 
Где искать то место, которое редиректит ?  smile  smile  smile  smile 

Автор: MisterCleric 25.9.2009, 12:53
Цитата

Где искать то место, которое редиректит

Я, по-моему, уже просил предоставить spring-security.xml из первого приложения...

Автор: _sten_ 25.9.2009, 13:18
вот здесь можеш посмотреть пример https://src.springframework.org/svn/spring-security/trunk/samples/cas

вот секюрити контекст из того-же примера:
Код

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:sec="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
    <sec:http entry-point-ref="casProcessingFilterEntryPoint">
        <sec:intercept-url pattern="/secure/extreme/**" access="ROLE_SUPERVISOR" requires-channel="https"/>
        <sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
        <sec:logout logout-success-url="/cas-logout.jsp"/>
        <sec:custom-filter ref="casProcessingFilter" after="CAS_PROCESSING_FILTER"/>        
    </sec:http>

    <sec:authentication-manager alias="authenticationManager">
        <sec:authentication-provider ref="casAuthenticationProvider"/>
    </sec:authentication-manager>

    <bean id="casProcessingFilter" class="org.springframework.security.cas.web.CasProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="authenticationFailureHandler">
            <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
                <property name="defaultFailureUrl" value="/casfailed.jsp"/>
            </bean>
        </property>
        <property name="authenticationSuccessHandler">
            <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
                <property name="defaultTargetUrl" value="/"/>
            </bean>
        </property>
        <property name="proxyGrantingTicketStorage" ref="proxyGrantingTicketStorage" />
        <property name="proxyReceptorUrl" value="/secure/receptor" />
    </bean>

    <bean id="casProcessingFilterEntryPoint" class="org.springframework.security.cas.web.CasProcessingFilterEntryPoint">
        <property name="loginUrl" value="http://localhost:8087/cas/login"/>
        <property name="serviceProperties" ref="serviceProperties"/>
    </bean>

    <bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
        <property name="userDetailsService" ref="userService"/>
        <property name="serviceProperties" ref="serviceProperties" />
        <property name="ticketValidator">
            <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
                <constructor-arg index="0" value="http://localhost:8087/cas" />
                <property name="proxyGrantingTicketStorage" ref="proxyGrantingTicketStorage" />
                <property name="proxyCallbackUrl" value="http://localhost:8080/spring-cas/secure/receptor" />
            </bean>
        </property>
        <property name="key" value="an_id_for_this_auth_provider_only"/>
    </bean>

    <bean id="proxyGrantingTicketStorage" class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl" />

    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
        <property name="service" value="http://localhost:8080/spring-cas/j_spring_cas_security_check"/>
        <property name="sendRenew" value="false"/>
    </bean>

    <sec:user-service id="userService">
        <sec:user name="rod" password="rod" authorities="ROLE_SUPERVISOR,ROLE_USER" />
        <sec:user name="sten" password="1313" authorities="ROLE_SUPERVISOR,ROLE_USER" />
        <sec:user name="root" password="Gfhjkm111" authorities="ROLE_SUPERVISOR,ROLE_USER" />
        <sec:user name="dianne" password="dianne" authorities="ROLE_USER" />
        <sec:user name="scott" password="scott" authorities="ROLE_USER" />
    </sec:user-service>
</beans>

Автор: Samotnik 25.9.2009, 13:29
Цитата(MisterCleric @  25.9.2009,  12:53 Найти цитируемый пост)
Я, по-моему, уже просил предоставить spring-security.xml из первого приложения... 

нету этого файла в первом приложении  smile

Добавлено через 6 минут и 42 секунды
на данный момент у меня вопрос немного поенялся, по сравнению  с начальным постом. 
В данный момент меня интересует следущее. 
Значит захожу я по адресу 
http://localhost:8080/alfresco
а меня выбрасывает вот на такую страницу 
https://localhost:8443/cas/login?service=http%3A%2F%2Falfresco%3A8080%2Falfresco%2Ffaces%2Fjsp%2Fdashboards%2Fcontainer.jsp

так вот собственно вопрос. Что отвечает за этот редирект ? 
Ведь это должно быть происанно в web.xml  приложения alfresco 
правда ?
Так вот что именно искать в этом web.xml ?   smile 

Автор: _sten_ 25.9.2009, 13:38
должен быть какойто фильтр.
и покажи свой web.xml 

Автор: Samotnik 25.9.2009, 14:34
Цитата(_sten_ @  25.9.2009,  13:38 Найти цитируемый пост)
и покажи свой web.xml  

smile
это трудно, там 700 строк кода. 
Но фильтр я нашел, их там тоже хватает. Какой именно искать нужно ?

Автор: _sten_ 25.9.2009, 15:25
для интеграци со спрингом создается org.springframework.web.filter.DelegatingFilterProxy, но он просто делегирует фильтрацию на фильтры обьявленые в security-context.xml(или application-context.xml или как ты там его назвал smile )

скачай тот пример который я скинул там все понятно....

Автор: Samotnik 25.9.2009, 15:54
_sten_,  вот фильтры из web.xml  моего 
Код

<!-- JASIG Java Spring Client -->
    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>casAuthenticationFilter</param-value>
        </init-param>
    </filter>
    
    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>casValidationFilter</param-value>
        </init-param>
    </filter>
    <!-- JASIG Java Spring Client -->

они ? 
где обработчики теперь на них искать ?

Автор: MisterCleric 25.9.2009, 16:17
рядом должна быть XML-ка, которая содержит spring-конфигурацию стандартного спринговского метода авторизации через CAS.
Вот теперь все понятно, что оно у тебя нормально настроено. Надо только посмотреть на эту конфигурацию, что бы понимать по словам _sten_, что нужно забрать в твое новое приложение

Автор: Samotnik 25.9.2009, 17:09
Так нашел xml
Скорее всего вот она 
Код

<bean name="casAuthenticationFilter" 
            class="org.jasig.cas.client.authentication.AuthenticationFilter" >
        <property name="casServerLoginUrl">
            <value>${alfa.ssoExternalService}/cas/login</value>
        </property>
        <property name="renew">
            <value>false</value>
        </property>
        <property name="gateway">
            <value>false</value>
        </property>
        <property name="serverName">
            <value>${alfa.ecmsExternalService}</value>
        </property>
    </bean>


Я так понмаю, что с помощью ее вызывается какой то стандартный класс и таким образом редиректит на страницу ?

Далее
Допустим разобрались каким образом он редиректит, теперь встает вопрос о том, каким образом он проверяет прошел ли пользователь аутентификацию ?  Как  CAS знает, какие пользователи уже есть в системе и какие у них права ?  

Автор: MisterCleric 25.9.2009, 17:45
Цитата

Как  CAS знает, какие пользователи уже есть в системе и какие у них прав

Это в доку 0 читать. Мы сами толком не знаем: уже бы ответели. Я, думаю, тебе не надо заморачиваться. просто в свое приложение копируешь данный конфиг и тестишь

Автор: Samotnik 25.9.2009, 18:21
MisterCleric, не совсем так. 
Мне еще очень важно знать, что cas еще знает про пользователя ! Это важно ! Какие еще данные доступны?  Что можно дернуть из него ?

Автор: _sten_ 25.9.2009, 21:35
Цитата

каким образом он проверяет прошел ли пользователь аутентификацию ? 

как я уже писал кас сохраняет айди сессии в crossdomain cookie, твой сервер передает кас серверу эту айдишку при проверке аутентификации.

Цитата

Мне еще очень важно знать, что cas еще знает про пользователя ! Это важно ! Какие еще данные доступны?  Что можно дернуть из него ? 

это зависит от того как настроен кас сервер, у него есть своя БД(скорей всего LDAP).

Также после успешной аутентификации ты можеш получить дополнительные параметры юзера из своей локальной БД, поищи в своем xml чтото вроде UserDetailsService

Добавлено через 5 минут и 41 секунду
вобще можно было бы не ленится и почитать доку

Автор: Samotnik 28.9.2009, 10:38
Цитата(_sten_ @  25.9.2009,  21:35 Найти цитируемый пост)
вобще можно было бы не ленится и почитать доку

http://static.springsource.org/spring-security/site/docs/2.0.x/reference/cas.html ?

Автор: magicfly 28.9.2009, 16:45
советую загуглить spring in action, там есть подробный пример как это делается. К сожалению, по памяти рассказать не могу 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)