java - 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

标签 java windows active-directory single-sign-on kerberos

在 Windows 进入锁定屏幕后,有没有办法阻止 Kerboros 缓存的票证被删除。

首次登录 Windows 时,klist.exe 会显示 2 个缓存的票证。但是,在出现 Windows 锁屏事件后,klist.exe 显示 0 个缓存票。

提前致谢。

最佳答案

这是设计使然。无法阻止 Kerberos 服务票证在屏幕锁定后被清除。一旦您再次访问受 Kerberos 保护的新资源,就会进行新的身份验证过程,并且会出现新的票证。了解 Kerberos 票证之间的区别很重要 - 有两种类型 - 票证授予票证 (TGT) 和服务票证 (ST)。您可以确保 Kerberos TGT 保留在客户端缓存中并且在屏幕锁定后不会被清除如果您的计算机正在参与 Active Directory 域并且您做了什么称为组策略更改以更改行为(请参阅下面的注释)。如果您不是 Active Directory 管理员,则必须联系他们让他们为您执行此操作。要在屏幕锁定后保留 TGT,请打开组策略管理控制台编辑器,找到链接到计算机的 GPO,并将策略设置为不需要联系域 Controller 即可解锁计算机。这样做将确保机器保留缓存的 Kerberos TGT 以进行重新身份验证。即使您以这种方式配置组策略,为您的 Web 服务器颁发的 Kerberos 服务票证也不会保留。同样,在这种情况下,在解锁工作站后,只有 TGT 保留在机器 Kerberos 缓存中,不会保留任何服务票据(例如为网络资源颁发的票据)。但对您来说,这可以让您更轻松地申请 ST,因为不必重新申请 TGT。虽然您可以在应用程序服务器端尽可能多地尝试围绕此进行编程,但实际上没有办法从应用程序端控制客户端的 Kerberos 整体安全行为。

这部分答案下方的所有内容都是针对后续评论进行的编辑。请避免对默认域 Controller 策略进行任何编辑,因为该策略仅适用于域 Controller 。请注意,每当我个人在 Active Directory 域中进行新的组策略更改时,除非我非常熟悉特定设置,否则我喜欢创建一个全新的 GPO,根据设置更改命名它制作,然后将其链接到计算机或用户对象所在的 OU。或者,如果您认为更改被认为是“安全的”并且不会对所有人造成负面影响,您也可以在域级别链接 GPO。

  1. 为此,请打开组策略管理控制台编辑器,然后创建一个新的 GPO。
  2. 将其命名为允许缓存登录
  3. 编辑允许的缓存登录 GPO。
  4. 导航到计算机配置 > 策略 > Windows 设置 > 安全设置 > 本地策略 > 安全选项 > 并配置以下两项:

Interactive logon: Number of previous logons to cache (in case Domain Controller is not available): 1 logons

Interactive logon: Require Domain Controller authentication to unlock workstation: DISABLED

接下来,重新启动客户端工作站 2-3 次。从技术上讲,您可以运行命令 gpupdate/force 来执行此操作,但我发现对于某些设置,尤其是这个设置,客户端工作站不仅需要重新启动,有时还需要 2 次,甚至可能需要 3 次重新启动,由于另一个名为 Fast Logon Optimization 的 GPO 设置。不管怎样,这个故事是另一个话题。

关于java - 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544998/

相关文章:

java - 关于阻塞同步集合

Java 已安装,但 `echo $JAVA_HOME` 似乎没有产生任何输出

Java 认为我的主文件夹是 C 盘?

python - Windows 中的信号处理

powershell - 使用 powershell 脚本递归列出广告组中的用户,无需使用 CmdLets

powershell - Set-ADGroup 找不到刚刚在同一脚本中创建的组 (PowerShell)

java - 严重 : Error configuring application listener of class org. apache.struts2.tiles.StrutsTilesListener java.lang.NoClassDefFoundError:

windows - 在 Windows 上的 Ubuntu 上的 Bash 上升级 python 版本?

windows - NET::ERR_CERT_COMMON_NAME_INVALID 安全证书未指定主题备用名称

java - 检测 Oracle 数字数据类型的实际精度和小数位数