仅使用 LogonUser() 来验证凭据

sme*_*ead 5 c++ windows security authentication active-directory

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

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

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

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

谢谢

小智 2

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

我使用以下解决方法:

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