Это пример приложения Kerberos, найденный по адресу https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth, соответствующий http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#samples-sec-server-win-auth.Spring Security Kerberos, Kerberos + AD - Ошибка: доступ запрещен, нет ключа для хранения
Все, что я делаю, это изменение src/main/resources/application.yml, чтобы соответствовать моей системе и идти туда и обратно между созданием SPN и Keytab-файлов. Мое приложение весны, кажется, начинает хорошо. Ниже приведена конфигурация Kerberos, которая выводится через консольный вывод.
Debug is true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null isInitiator false KeyTab is /etc/client-server.keytab refreshKrb5Config is false principal is HTTP/[email protected] tryFirstPass is false useFirstPass is false storePass is false clearPass is false
principal is HTTP/[email protected]
Will use keytab
Commit Succeeded
Таким образом, я вижу, что клиентское приложение уже приняло мои настройки. Затем я пытаюсь получить доступ к клиент-серверу: 8080/привет через хром на другой машине. Первая ошибка, которую я получаю, - это отказ от Acces (пользователь анонимный). Предполагается, что он перенаправляется на точку входа аутентификации. Тогда я получаю следующее, заканчивая «Нет ключа для хранения»
[nio-8080-exec-4] w.a.SpnegoAuthenticationProcessingFilter : Received Negotiate Header for request client-server:8080/favicon.ico: Negotiate YIIHZAYGKwYBBQUCoIIHWDCCB1SgMDAuBgk……./9AdsoFH2ya7C
[nio-8080-exec-4] o.s.s.authentication.ProviderManager : Authentication attempt using org.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider
[nio-8080-exec-4] .a.KerberosServiceAuthenticationProvider : Try to validate Kerberos Token
[nio-8080-exec-4] .a.KerberosServiceAuthenticationProvider : Succesfully validated [email protected]
[nio-8080-exec-4] o.s.s.l.s.FilterBasedLdapUserSearch : Searching for user '[email protected]', with user search [ searchFilter: '', searchBase: 'DC=xxxxx', scope: subtree, searchTimeLimit: 0, derefLinkFlag: false ]
Debug is true storeKey true useTicketCache true useKeyTab true doNotPrompt true ticketCache is null isInitiator true KeyTab is null refreshKrb5Config is false principal is HTTP/[email protected] tryFirstPass is false useFirstPass is false storePass is false clearPass is false
Acquire TGT from Cache
Principal is HTTP/[email protected]
2015-11-27 11:38:47.906 DEBUG 3183 --- [nio-8080-exec-4] w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession. 2015-11-27 11:38:47.906 DEBUG 3183 --- [nio-8080-exec-4] s.s.w.c.SecurityContextPersistenceFilter : SecurityContextHolder now cleared, as request processing completed 2015-11-27 11:38:47.912 ERROR 3183 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception org.springframework.ldap.AuthenticationException: No key to store; nested exception is javax.naming.AuthenticationException: No key to store [Root exception is javax.security.auth.login.LoginException: No key to store]
Теперь, похоже, что приложение может проверить мой пользователь, но я понятия не имею, если он может найти свою информацию о пользователе. Просмотр источника для Krb5LoginModule.java по адресу cr.openjdk.java.net/~weijun/7201053/webrev.00/raw_files/new/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java, вы можете найти исключение для входа, без ключа для хранения, путем простого поиска. В коде говорится, что мой ktab (keytab, который я предполагаю), имеет значение null. Как ни странно, вывод на консоль говорит, что когда я пытаюсь перемещаться с помощью браузера, keytab имеет значение null, хотя это не было, когда я запускал приложение.
Кто-нибудь знает, почему мой keytab имеет значение null, когда пользователь пытается получить доступ к моему приложению? Или что-то не так с моей конфигурацией приложения или системы?