Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring LDAP + kerio / 23 сообщений из 23, страница 1 из 1
28.03.2016, 08:39
    #39201688
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
На предприятии пользователи получают доступ к интернету через kerio
Есть некий АРМ (локальный в сети компании) в котором есть форма Spring LDAP /
вот пример : https://spring.io/guides/gs/authenticating-ldap/


форма авторизации избыточна - в браузере пользователь и так уже залогинен ...

как получить его роли из LDAP (или через kerio ) сразу без формы , ведь он уже авторизован?

что то не могу понять ? Помогите !

Ведь ему нет необходимости вводить логин и пароль еще раз ?! так ведь?!

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    @Bean
    public ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider
                = new ActiveDirectoryLdapAuthenticationProvider(env.getRequiredProperty("ldap.domain"), env.getRequiredProperty("ldap.url"));
        activeDirectoryLdapAuthenticationProvider.setConvertSubErrorCodesToExceptions(true);
        activeDirectoryLdapAuthenticationProvider.setUseAuthenticationRequestCredentials(true);
        activeDirectoryLdapAuthenticationProvider.setAuthoritiesMapper(grantedAuthoritiesMapper());

        //activeDirectoryLdapAuthenticationProvider.setUserDetailsContextMapper(userDetailsContextMapper());
        return activeDirectoryLdapAuthenticationProvider;
    }



    @Override
    @Autowired
    @Profile("production")
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        logger.info(TextHelper.hashSignDelimeter(env.getActiveProfiles()));
        if (Arrays.asList(env.getActiveProfiles()).contains("production")) {
            auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
        }
    }
...
Рейтинг: 0 / 0
28.03.2016, 09:11
    #39201710
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
он авторизован ГДЕ? в керио? ну да керио кидает браузеру свою куки и по ней понимает что юзеру можно в инет выходить. ну или по айпишнику. какое это отношение имеет к сервлету и его джейсейшнайди? никакого. авторизоваться будешь по-любому.
...
Рейтинг: 0 / 0
28.03.2016, 10:39
    #39201839
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2,

spring ldap либа может каким то образом запросить сама - список ролей ?

по текущему пользователю ?

Хочется чтобы работа с АРМом была прозрачной - один раз при открытии браузера ввел логин и пароль и дальше все ресурсы доступны ...
...
Рейтинг: 0 / 0
28.03.2016, 10:41
    #39201841
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
И еще нубовский вопрос :
как получить путь к файлу пропертей ? в рантайме ?




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@PropertySources({
@PropertySource((name = "arm", value = "file:/etc/jetty9/arm.properties", ignoreResourceNotFound = false)
})
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    protected Environment env;

  @Resource(name = "arm")
    private Properties armProperty;




Что хочу в логи увидеть что мы прочитали именно файл ,который по пути ....

"file:/etc/jetty9/arm.properties"
...
Рейтинг: 0 / 0
28.03.2016, 11:07
    #39201867
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
да, роли дергает легко.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@ModelAttribute("loggedUser")
    String getLoggedUser(){
        UserDetails user = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        for(GrantedAuthority gr : user.getAuthorities()){

        System.out.println(gr.getAuthority());
        }
        System.out.println(user.getPassword());
        return user.getUsername();
    }



но залогиниться (сказать сервлету свой логин и пароль) придется по-любому. ну или искать механизм обмена этим с керио. что мне кажется малореальным.
...
Рейтинг: 0 / 0
28.03.2016, 11:50
    #39201907
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Я так понимаю, Atum1 хочет сделать что-то похожее на Single Sign On.

Kerion заявляет, что они поддерживают интеграцию с ActiveDirectory
Народ в I-net'е уверяет, что Kerio поддерживает NTLM авторизацию.

форма авторизации избыточна - в браузере пользователь и так уже залогинен ...

как получить его роли из LDAP (или через kerio ) сразу без формы , ведь он уже авторизован?

НЕ понятно, в чем же проблема получить его роли из по LDAP
...
Рейтинг: 0 / 0
28.03.2016, 11:56
    #39201915
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
керио у себя просто помечает что этому юзеру (в виде куки или айпишника) сгрантован доступ и всё. дальше что? тебе же цель сервлету сообщить что вот конкретно этому компу (этой куки этому айпишнику) керио дал доступ.
...
Рейтинг: 0 / 0
28.03.2016, 12:23
    #39201953
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2керио у себя просто помечает что этому юзеру (в виде куки или айпишника) сгрантован доступ и всё. дальше что? тебе же цель сервлету сообщить что вот конкретно этому компу (этой куки этому айпишнику) керио дал доступ.
Они уверяют, что поддерживают NTLM

Т.ч. чисто теоретически , если два сервера настроены на аутентификацию через NTLM и ActiveDirectory - то пользователю ничего вводить не нужно. Насколько это удобно на практике - не знаю.

Для WebLogic доки по настройке на металинке находил. Но настройкой Single Sign "по серьезному" занимался пару месяцев мой коллега. Но мы заказчику вообще весь стек продуктов Oracle Identity Manager разворачивали и к ActiveDirectory прикручивали.
...
Рейтинг: 0 / 0
28.03.2016, 12:39
    #39201975
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2керио у себя просто помечает что этому юзеру (в виде куки или айпишника) сгрантован доступ и всё. дальше что? тебе же цель сервлету сообщить что вот конкретно этому компу (этой куки этому айпишнику) керио дал доступ.

Вообще-то это к Spring-scurity не относится.
Просто нужно в нем указать какие роли имеют доступ к тем или иным ресурсам.
А все остальное это дело сервера приложений.
AOP как никак. ;-)

Т.е. нужно в начале добиться чтобы ваш сервис приложений мог работать с KERIO.
Как только это заработает spring-security заработает тоже.
Иначе придется писать свой модуль безопасности для сервера приложений.

Удачи!
...
Рейтинг: 0 / 0
28.03.2016, 12:55
    #39201999
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
я не понимаю роль керио. вы хотите из керио узнать этот юзер (комп логин) уже получил разрешение или нет и всё? типа вот я в керио ввел пароль и мой сервлет знает что я это я. активдайректори НЕ ЗНАЕТ разрешил ли керио доступ тому или иному юзеру или нет. следовательно из активдайректори ты получить ЭТИ сведения не сможешь. а т.к. спринг секурити работает с АД, значит и спринг секурити об этом не узнает. я проблему вижу как то так.
...
Рейтинг: 0 / 0
28.03.2016, 16:17
    #39202288
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Leonid Kudryavtsev,

Дайте пример кода и статью??
...
Рейтинг: 0 / 0
28.03.2016, 16:23
    #39202297
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2,
+1
я думаю, керио работает вообще раньше всех.
Если он по урл фильтрует машину или урл рессурс, то сервлет об этом не узнает. Не его это дело))).
IMHO
...
Рейтинг: 0 / 0
28.03.2016, 16:34
    #39202316
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Atum1,

Для информации: http://www.kerio.ru/learn-community/developer-zone
...
Рейтинг: 0 / 0
28.03.2016, 16:46
    #39202338
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2да, роли дергает легко.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@ModelAttribute("loggedUser")
    String getLoggedUser(){
        UserDetails user = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        for(GrantedAuthority gr : user.getAuthorities()){

        System.out.println(gr.getAuthority());
        }
        System.out.println(user.getPassword());
        return user.getUsername();
    }



но залогиниться (сказать сервлету свой логин и пароль) придется по-любому. ну или искать механизм обмена этим с керио. что мне кажется малореальным.

Да так получаю все роли ... через UserDetails - LdapUserDetailsImpl

https://docs.spring.io/spring-security/site/docs/3.2.8.RELEASE/apidocs/org/springframework/security/ldap/userdetails/LdapUserDetailsImpl.html


Да идея такая - зная кто сейчас на сайте (был залогинен через Керио - имея его логин - более чем достаточно !!!!!)

фоном на стороне сервера делаю запрос в AD LDAP от его username

и получаю его Granted Authorities

тест такой :

//Так получаю список всех пользователей ... а хочу к ним список всех ролей ...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
   @Value("${ldap.url}")
    private String url;

    @Autowired
    private Environment environment;

    @Bean
    LdapContextSource contextSource() {

        LdapContextSource lcs = new LdapContextSource();
        lcs.setUrl(url);
        lcs.setBase("OU=RealUsers,OU=Users,OU=.CompanyRoot,DC=example,DC=com");
        lcs.setUserDn(environment.getRequiredProperty("user"));
        lcs.setPassword(environment.getRequiredProperty("password"));
        lcs.afterPropertiesSet();
        return lcs;

    }

    @Bean
    LdapTemplate ldapTemplate() {
        LdapTemplate ldap = new LdapTemplate(contextSource());
        return ldap;
    }

  @Autowired
    private LdapTemplate ldapTemplate;


    public List getAllPersonNames() {
        return ldapTemplate.search("", "(&(objectCategory=person)(objectClass=user))", (AttributesMapper) (Attributes attrs) -> attrs.get("cn").get());
    }


    @Test
    public void testLdap() {
      getAllPersonNames().forEach(System.out::println);
    }



тут еще вопрос как составить правильно запрос для данного пользователя
...
Рейтинг: 0 / 0
28.03.2016, 17:23
    #39202384
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
я не понимаю у тебя кто лдап провайдер? активдайректори или что то еще? если ад то там вообще всё просто. и чем тебе узердетайлз не нравится?
...
Рейтинг: 0 / 0
28.03.2016, 17:39
    #39202404
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
и еще что тебе не нравится кроме того что у юзера и так и сяк есть один логин и пароль (в контексте к АД) он с этим логином и на комп логинитсяи в инет и на твою прогу. ну да пароль надо постоянно ввводить. что в этом плохого? это нома имхо. кроме того привязка непосредственно к керио идея так себе. завтра выйдет новая версия керио или они вообще от него откажутся скажем в пользу микротика или циски - будешь свой софт переписывать?

вязать надо с лдап сервером, т.к. он на вершине пирамиды.
...
Рейтинг: 0 / 0
28.03.2016, 18:20
    #39202442
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
lor2ну да пароль надо постоянно ввводить.
дак делается для того чтобы машина загрузилась (ввёл доменный пароль) и далее нигде не вводить.
...
Рейтинг: 0 / 0
28.03.2016, 18:40
    #39202461
lor2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
сервлет узнать может о том кто к нему ломится только лишь по имени машины максимум. следовательно надо через имя машины вытаскивать из ад кто залогинен на нее на данный момент. в юзере по факту эта инфа не хранится. надо ему создавать новый атрибут и в этот атрибут класть имя машины, или в дескрипшн компа при логине юзера пихать инфу кто в комп залогинен. (простой вариант) далее, ты лезешь в сервлет, сервлет берет имя твоего компа и хз как в лдапе ты вынимаешь описание компа по имени хоста с которого лезут и сверяешь с юзером (который сидит в описании компа) можно ли ему попасть на какой-нить урл/ури в сервлете.

как это в спрингсекурити реализовать? хз. наверное можно, но надо смотреть.

узнать кто залогинен на комп средствами ТОЛЬКО лишь браузера насколько я знаю - невозможно.
...
Рейтинг: 0 / 0
28.03.2016, 18:45
    #39202465
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
...
Рейтинг: 0 / 0
28.03.2016, 23:08
    #39202612
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Leonid Kudryavtsev,

http://docs.spring.io/autorepo/docs/spring-security-kerberos/1.0.2.BUILD-SNAPSHOT/reference/htmlsingle/

Вот что нашел. Но пока не понятно как это использовать



Ldap раюотает по открвтому каналу. Нет ldaps не настроен да и сам spring на jetty так же не имеет ssl

А автоизация через керио имеет https пусть и бейсик авторизацию но по https

Так что хочется да олин раз авторизававщись получать для текущего пользователя его рофли из ldap
...
Рейтинг: 0 / 0
28.03.2016, 23:10
    #39202615
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Petro123lor2ну да пароль надо постоянно ввводить.
дак делается для того чтобы машина загрузилась (ввёл доменный пароль) и далее нигде не вводить.

Да именно так и хочется вот есть. В сети ресурс и нужен сотркднику на него доступ. Он открыл урл в локальной сети и ему показывается все что есть у него в ролях

Все прозрачно


Но как такое создать?
...
Рейтинг: 0 / 0
29.03.2016, 06:50
    #39202673
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
Atum1Petro123пропущено...

дак делается для того чтобы машина загрузилась (ввёл доменный пароль) и далее нигде не вводить.

Да именно так и хочется вот есть. В сети ресурс и нужен сотркднику на него доступ. Он открыл урл в локальной сети и ему показывается все что есть у него в ролях

Все прозрачно


Но как такое создать?

Еще раз:
Это не работа spring, это работа сервера приложений и/или веб-сервера.
Может сервер приложений в NTLM.
Будет все прозрачно.
Не может... Придется писать свою имплементацию.
Да еще надо чтобы и браузер мог в NTLM.
Вроде бы все актуальные браузеры могут, но я могу ошибаться.
Т.к. фичи "впиливаются" и "выпиливаются" очень быстро.
...
Рейтинг: 0 / 0
29.03.2016, 06:55
    #39202675
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring LDAP + kerio
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring LDAP + kerio / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]