Вот моя проблема:
Контекст : -Windows Server 2012 с ActiveDirectory -Tomcat -Rest API (Spring)
В настоящее время я пытаюсь ограничить RESTзапрос.Я хочу, чтобы только определенные группы AD могли получить доступ к конкретным ресурсам.Я ограничен проверкой подлинности Kerberos.
Конфигурация системы
- Создание пользователя в домене "Tomcat"
- setspn -a HTTP/apirest.domain@DOMAIN
- Сгенерируйте tomcat.keytab с помощью ktpass
Конфигурация отдыха API
Я использую пример безопасности пружины на github, который вы можете найти здесь:
https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth
Я знаю, что существует EntryPoint, и это не нужно в моем контексте (API Rest).Я выбрал этот пример, потому что он использует контекст аутентификации Windows и использует его для автоматической аутентификации в контексте безопасности Spring.Сразу после этого отправляется запрос ldap для извлечения всей информации о зарегистрированном пользователе.В моем случае мне нужно извлечь группу.
Я также использую:
https://github.com/GyllingSW/kerberos-demo
Для извлечения роли пользователя с классом «RoleStrippingLdapUserDetailsMapper.java» вместо «ActiveDirectoryLdapAuthoritiesPopulator».Эта реализация также предлагает аутентификацию на локальном хосте, но проблема с токеном NTLM, похоже, исправлена в последнем коммите весенней безопасности.
Я не совсем уверен, что это правильный способ сделать то, что я хочу.
Кажется, что моя аутентификация не удалась, и у меня только одна вещь работает неправильно в моих журналах ..
«Свойство userDn не установлено - анонимный контекст будет использоваться для операций чтения-записи»
Вопросы
- Нужно ли запускатьмой сервис Tomcat с использованием учетной записи Tomcat?(Кажется, да)
- Правильно ли я поступаю с безопасностью Kerberos?
- Как избавиться от анонимного контекста?
- Кажется, анонимный контекстбыть установлен сразу после запуска Tomcat.Я хочу получить контекст сразу после этого, мой пользователь (например, user1) запрашивает API остальных (EntryPoint или любой другой)
Если что-то неясно, дайте мне знать, я постараюсь переформулировать!
Спасибо,