我正在使用coldfusion.security.NTAuthentication
与 ColdFusion 一起提供,用于集成 Windows SBS 上的 Activity 目录设置,旨在返回特定用户所属的组。
在我的开发机器上,这工作得非常好 - 但是在实际机器上我看到以下错误:
Error in locating groups for user XXX in domain XXX.
这两台机器有很大不同,但在我看来并不重要。
设置如下:
开发机器
- Windows 2008
- ColdFusion 11 开发者版
- Java 8.0.25.18
生产机器
- Windows 2008 R2
- ColdFusion 10 标准版
- Java 8.0.710.15
Active Directory 计算机
- Windows SBS 2011
值得注意的是,虽然这些机器不相同,但两者都能够通过 authenticateUser()
对用户进行身份验证。方法。
这表明该类正在运行并且能够毫无问题地连接到 AD 服务器。
我还可以使用<cfldap>
检索有关用户的信息。
这是一些非常简单的代码:
Local.ntauth = createObject("java", "coldfusion.security.NTAuthentication");
Local.ntauth.init('MyDomain');
Local.Authenticated = Local.ntauth.authenticateUser('Username', 'Password'); // Returns 'YES'
Local.Groups = Local.ntauth.GetUserGroups('Username') // Throws error
该问题不仅限于GetUserGroups
方法,尝试使用 IsUserInGroup
时会出现类似的错误.
有人可以帮忙吗?
最佳答案
这原来是 Windows 权限的问题。 (不是全部吗?)
所以,我在问题中忽略提及的是,生产服务器已使用 CF10 Lockdown Guide 中详细介绍的技术进行保护。 .
此过程的一部分涉及为 ColdFusion 服务创建专用用户。
如果我使用标准“本地系统”用户,GetUserGroups
函数似乎可以工作,但如果我使用专用 ColdFusion 用户,则不行。
在进程监视器的帮助下,我注意到当调用 GetUserGroups
函数时,会调用 Active Directory 服务器到 /PIPE/Samr
。
当 ColdFusion 使用本地系统用户运行时,此调用由 NT AUTHORITY\SYSTEM 进行并返回一大堆信息 - 但是当 ColdFusion 以新的专用用户帐户,调用由该帐户进行并返回登录失败。
大概必须有一种方法可以向服务器本地的 ColdFusion 用户授予对 Active Directory 的访问权限,从而允许 GetUserGroups
调用。
我不确定如何实现这一目标,因此目前已恢复为本地系统用户,但我可能会重新访问此问题并更新我的答案。
关于java - Coldfusion.security.NTAuthentication : Error in locating groups for user XXX in domain XXX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35322229/