2

我们的 Kerberos 票证每 10 小时过期一次(我们与 Win2k8r2 AD 挂钩),这使用户无法登录。至少用户是这么说的。

票过期是有道理的,但不知何故 Share 似乎无法顺利取回一张新票,我相信它应该可以。

我们的设置:

  • 在 Ubuntu 12.04 上运行的 Alfresco 4.0.d(社区)
  • JDK7(我们也尝试过使用 JDK6)
  • 视窗 2008R2 广告
  • Kerberos SSO
  • Windows 7 客户端,IE9

在 Alfresco 方面一切正常。Alfresco Explorer 和 CIFS 很好,但是一旦 Share 运行了 10 小时(AD 中的默认票证寿命),我们就无法登录。首先我们会提示浏览器登录,然后是 windows 登录和之后共享登录表单。如果我重新加载页面并输入我的密码几次,它最终会让我进入,我们可以再运行 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/alfresco.domain.local@DOMAIN.LOCAL";
};

共享配置-custom.xml:

<config evaluator="string-compare" condition="Kerberos" replace="true">
  <kerberos>
     <password>password</password>
     <realm>DOMAIN.LOCAL</realm>
     <endpoint-spn>HTTP/alfresco.domain.local@DOMAIN.LOCAL</endpoint-spn>
     <config-entry>ShareHTTP</config-entry>
  </kerberos>
</config>

我已按照此处的说明进行操作:http ://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems#Kerberos一切都按照文档中的说明进行设置。

请让我知道我是否应该提供其他信息。

4

1 回答 1

3

在您的 AD 用户管理器(高级)中为 ShareHTTP 选项卡选择:帐户检查不需要 Kerberos 预身份验证

并关注在线文档,这些文档更新更频繁,更新更频繁。

于 2013-06-05T18:33:24.130 回答