【问题标题】:Using LogonUser() only to Validate Credentials仅使用 LogonUser() 来验证凭据
【发布时间】:2015-04-28 05:38:10
【问题描述】:

我们正在开发具有内部用户帐户系统的应用程序,但希望能够使用来自 Active Directory 和/或 Windows 帐户的凭据。为此,我们将用户 SID 存储在应用程序用户表的字段中。我们的登录机制是这样的:

出现的问题是:我们一直使用LOGON32_LOGON_NETWORK作为logon_type,但现在我们遇到了一些“从网络访问这台计算机”被拒绝的安全配置,这意味着网络登录类型被禁止。

我的问题是在这种情况下我们应该使用什么登录类型?交互的?除了提取用户的 SID 之外,我们实际上并没有将登录令牌用于其他任何事情。我们的应用程序有自己的内部组和权限;我们不以任何方式使用 Windows 组或权限。从 Windows 和域控制器的角度来看,我们所做的只是登录和快速注销。

或者我们是否以完全错误的方式看待这个问题,我们应该完全使用其他登录方法?

谢谢

【问题讨论】:

  • 这是桌面应用程序还是网络应用程序?为什么不使用 Kerberos 针对 AD 对用户进行身份验证?
  • 桌面。我们已经编写了登录内容,我们希望只需要更改一个参数。除了 AD 之外,我们还希望能够使用本地 Windows 帐户。
  • 桌面?那么用户已经登录了吗?为什么您的应用程序需要他们再次登录,为什么不直接使用现有的 SID? (更重要的是,您确实意识到用户将能够轻松绕过您的登录机制并像任何其他用户一样登录到您的应用程序?)
  • LogonUser 调用发生在 SYSTEM 帐户上运行的服务中。我看不出他们如何能够在没有计算机管理员权限的情况下欺骗 SID。
  • 是的,如果它是一项服务就可以了。在那里草草下结论,对不起。而且由于用户必须以交互方式登录,LOGON32_LOGON_INTERACTIVE 是一个非常明智的选择。但是请注意,命名管道(和大多数其他 IPC 机制)允许您确定用户的身份,而无需重新验证他们的身份。

标签: c++ windows security authentication active-directory


【解决方案1】:

我还惊讶地发现,当 本地计算机 上的每个人都没有授予用户权限“从网络访问这台计算机”时,LOGON32_LOGON_NETWORK 类型的 LogonUser() 会失败。

我使用以下解决方法:

  • 首先尝试 LogonUser()LOGON32_LOGON_NETWORK 类型。
  • 如果失败并出现错误ERROR_LOGON_TYPE_NOT_GRANTED,请使用LOGON32_LOGON_NEW_CREDENTIALS 类型和LOGON32_PROVIDER_WINNT50 登录提供程序调用LogonUser()

【讨论】:

  • 这应该可行,尽管它会产生使用两次登录尝试的副作用,这在锁定前尝试次数较少的高安全性网络中可能是不可取的。可能在某处保存标志是个好主意,因此它只执行一次。
  • 保存标志是个好主意。我想 ERROR_LOGON_TYPE_NOT_GRANTED 登录失败不应被系统视为登录失败。
【解决方案2】:

您可以与 SSPI 服务通信以验证用户的凭据并获取令牌,而无需特殊权限。这需要大量晦涩的代码和

http://support.microsoft.com/kb/180548 的例子; SSPLogonUser 函数是获取令牌的地方。

【讨论】:

  • 实际上,在重新阅读时,我不确定这是否适合您。无论如何,我会留下答案。
【解决方案3】:

约定是使用 LOGON32_LOGON_BATCH,如文档所示:

此登录类型适用于批处理服务器,其中进程可以代表用户执行而无需他们的直接干预。 此类型也适用于一次处理多次纯文本身份验证尝试的高性能服务器,例如邮件或网络服务器。

(强调我的)。

系统管理员可能仍需要重新配置服务器以向相关用户授予批量登录访问权限,但因为这不会授予用户对任何 Windows 功能的访问权限(例如,使用远程桌面、连接到网络共享,或者如果他们以某种方式访问​​控制台,则以交互方式登录)这应该不是问题。

【讨论】:

  • 很遗憾,这是行不通的,因为大多数系统都没有授予此权限。我想我可能会坚持使用 Interactive。
  • 大多数系统管理员不愿意让最终用户以交互方式登录服务器。
猜你喜欢
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多