我们正在开发一个具有内部用户帐户系统的应用程序,但希望能够使用Active Directory和/或Windows帐户中的凭据。为此,我们将用户SID存储在应用程序用户表的字段中。我们的登录机制的功能如下:
出现的问题是:我们一直在使用LOGON32_LOGON_NETWORK作为logon_type,但我们现在遇到了一些安全配置,其中"从网络访问这台计算机"被拒绝,这意味着禁止使用网络登录类型。
我的问题是我们应该在这种情况下使用什么登录类型?互动?除了提取用户的SID之外,我们实际上并没有使用Logon令牌。我们的应用程序有自己的内部组和权限;我们不以任何方式使用Windows组或权限。从Windows和域控制器的角度来看,我们所做的就是登录并快速注销。
或者我们是否以完全错误的方式看待这个问题,我们应该完全使用其他一些登录方法?
由于
答案 0 :(得分:1)
我也很惊讶地发现,当用户使用权时,LogonUser()
类型的LOGON32_LOGON_NETWORK
会失败"从网络访问此计算机"未在本地计算机上为所有人授予。
我使用以下解决方法:
LogonUser()
类型的LOGON32_LOGON_NETWORK
。ERROR_LOGON_TYPE_NOT_GRANTED
,请使用LogonUser()
类型和LOGON32_LOGON_NEW_CREDENTIALS
登录提供商调用LOGON32_PROVIDER_WINNT50
。答案 1 :(得分:0)
您可以与SSPI服务进行通信,以验证用户的凭据并获取令牌,而无需特殊权限。这需要很多模糊的代码和
有关示例,请参阅http://support.microsoft.com/kb/180548; SSPLogonUser
函数是获取令牌的位置。
答案 2 :(得分:0)
惯例是使用LOGON32_LOGON_BATCH,如文档所述:
此登录类型适用于批处理服务器,其中进程可能代表用户执行而无需直接干预。 此类型也适用于一次处理许多纯文本身份验证尝试的性能较高的服务器,例如邮件或Web服务器。
(强调我的)。
系统管理员可能仍需要重新配置服务器以授予对相关用户的批量登录访问权限,但因为这不授予用户访问任何Windows功能的权限(例如,能够使用远程桌面,连接到一个网络共享,或者如果他们以某种方式获得访问控制台的交互式登录)这应该不是问题。