Alfresco Share — проблема единого входа Kerberos

Срок действия наших билетов Kerberos истекает каждые 10 часов (мы подключены к Win2k8r2 AD), из-за чего пользователи не могут войти в систему. По крайней мере, так говорят пользователи.

Срок действия билета имеет смысл, но почему-то Share не может гладко получить новый, что, я считаю, должно быть в состоянии.

Наша установка:

  • Alfresco 4.0.d (сообщество) работает на Ubuntu 12.04
  • JDK7 (мы пробовали и с JDK6)
  • Windows 2008R2 AD
  • Единый вход Kerberos
  • Клиент Windows 7, IE9

На стороне Alfresco все работает нормально. С Alfresco Explorer и CIFS все в порядке, но как только Share работает 10 часов (время жизни билета по умолчанию в AD), мы не можем войти в систему. Сначала нам будет предложено войти через браузер, затем через Windows и после этого форма входа в систему Share. Если я перезагружу страницу и пару раз введу свой пароль, он в конце концов впустит меня, и мы сможем работать еще 10 часов. Другое решение — перезапустить Share, и тогда это не повлияет на пользователей. Это указывает на проблему с Share, а не на клиенте, но я могу ошибаться.

Любые указатели будут очень кстати, я очень застрял в этом вопросе.

Мы получаем это исключение:

13:55:18,443  DEBUG [site.servlet.SSOAuthenticationFilter] Kerberos logon error
    java.lang.IllegalStateException: This ticket is no longer valid
    at javax.security.auth.kerberos.KerberosTicket.toString(KerberosTicket.java:638)
    at java.lang.String.valueOf(String.java:2854)
    at java.lang.StringBuilder.append(StringBuilder.java:128)
    at sun.security.jgss.krb5.SubjectComber.findAux(SubjectComber.java:150)
    at sun.security.jgss.krb5.SubjectComber.find(SubjectComber.java:59)
    at sun.security.jgss.krb5.Krb5Util.getTicket(Krb5Util.java:155)
    at sun.security.jgss.krb5.Krb5Context$1.run(Krb5Context.java:606)
    at sun.security.jgss.krb5.Krb5Context$1.run(Krb5Context.java:599)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:598)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
    at org.alfresco.web.site.servlet.KerberosSessionSetupPrivilegedAction.run(KerberosSessionSetupPrivilegedAction.java:127)
    at org.alfresco.web.site.servlet.KerberosSessionSetupPrivilegedAction.run(KerberosSessionSetupPrivilegedAction.java:44)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:356)
    at org.alfresco.web.site.servlet.SSOAuthenticationFilter.doKerberosLogon(SSOAuthenticationFilter.java:1009)
    at org.alfresco.web.site.servlet.SSOAuthenticationFilter.doFilter(SSOAuthenticationFilter.java:441)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1326)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:940)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:874)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
    at org.eclipse.jetty.server.Server.handle(Server.java:349)
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:904)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
    at java.lang.Thread.run(Thread.java:722)

Немного больше информации, java.login.config:

ShareHTTP {
   com.sun.security.auth.module.Krb5LoginModule required
   storeKey=true
   useKeyTab=true
   keyTab="/opt/share/kerberos/alfrescohttp.keytab"
   principal="HTTP/[email protected]";
};

доля-config-custom.xml:

<config evaluator="string-compare" condition="Kerberos" replace="true">
  <kerberos>
     <password>password</password>
     <realm>DOMAIN.LOCAL</realm>
     <endpoint-spn>HTTP/[email protected]</endpoint-spn>
     <config-entry>ShareHTTP</config-entry>
  </kerberos>
</config>

Я следовал инструкциям здесь: http://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems#Kerberos все настроено именно так, как написано в документации.

Пожалуйста, дайте мне знать, если я должен предоставить дополнительную информацию.


person ohej    schedule 05.06.2013    source источник


Ответы (1)


Выберите в своем диспетчере пользователей AD (дополнительно) для вкладки ShareHTTP: Проверка учетной записи Не требовать предварительной аутентификации Kerberos

И следуйте онлайн-документам, которые более актуальны и обновляются чаще.

person Tahir Malik    schedule 05.06.2013
comment
В записи ShareHTTP используется пользователь AlfrescoHTTP (тот же, что и AlfrescoHTTP). Не требовать предварительной проверки подлинности Kerberos уже задано для пользователя, а также задано делегирование (Доверять этому пользователю делегирование любой службе (только Kerberos)). Онлайн-документы, похоже, не отличаются от вики :( - person ohej; 05.06.2013
comment
Хорошо, тогда добавьте сюда журналы вашего домена AD. Вероятно, там зарегистрирована проблема, почему он не запрашивает новый билет. И вы добавили свой домен в доверенную сеть/uris в своем браузере, верно? - person Tahir Malik; 05.06.2013
comment
Я пытался добавить его в надежные сайты, удалил и прочитал как сайт интрасети. Я также пробовал автоматический вход в систему с параметрами имени пользователя и пароля, тот же результат. Я должен признать, что я немного новичок, когда дело доходит до окон. Не могли бы вы дать мне быстрый шаг за шагом, чтобы предоставить вам соответствующие журналы AD? - person ohej; 06.06.2013
comment
Пробовал экспортировать Просмотр событий -> Журналы Windows -> Безопасность. pastebin.com/mXLpQwS4 Я потратил две минуты примерно на то время, когда сегодня получил исключение (журнал общего доступа показал 16: 01:03,181, поэтому я взял все события с 16:00 до 16:02). Дайте мне знать, если вам нужна дополнительная информация - person ohej; 06.06.2013
comment
Вы добавили несколько имен servicePrincipalName в свои конфигурации AD? Вы должны добавить alfrescohttp/‹client server› (используется при генерации keytab) и alfrescohttp/‹client server›.domain - person Tahir Malik; 07.06.2013
comment
Да, я добавил оба, порядок имеет значение? Я думаю, что сначала добавил alfrescohttp/server.domain.local, а затем alfrescohttp/server - person ohej; 08.06.2013
comment
Оказывается, мои проблемы были вызваны флагами отладки. Я добавил -Dsun.security.krb5.debug=true -Dsun.security.jgss.debug=true.. после того, как я удалил их, проблема исчезла. Странный! - person ohej; 13.06.2013