首页 文章

仅使用LogonUser()验证凭据

提问于
浏览
4

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

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

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

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

谢谢

3 回答

  • 0

    local computer 上没有为Everyone授予用户权限"Access this computer from the network"时,我也惊讶地发现带有 LOGON32_LOGON_NETWORK 类型的 LogonUser() 失败 .

    我使用以下解决方法:

    • 首先尝试使用 LOGON32_LOGON_NETWORK 类型的 LogonUser() .

    • 如果失败并显示错误 ERROR_LOGON_TYPE_NOT_GRANTED ,请使用 LOGON32_LOGON_NEW_CREDENTIALS 类型和 LOGON32_PROVIDER_WINNT50 登录提供程序调用 LogonUser() .

  • 1

    您可以与SSPI服务进行通信,以验证用户的凭据并获取令牌,而无需特殊权限 . 这需要很多模糊的代码和

    有关示例,请参阅http://support.microsoft.com/kb/180548; SSPLogonUser 函数是获取令牌的位置 .

  • 0

    惯例是使用LOGON32_LOGON_BATCH,如下所述:

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

    (强调我的) .

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

相关问题