WIN32登录问题

问题描述:

我们已经开发了一个带有Web Server 2008的ASP.NET 3.5 Web应用程序,并且已经使用活动目录作为凭证存储实现了自定义身份验证解决方案。我们的前端应用程序使用正常的登录表单来捕获用户名和密码,并利用Win32 LogonUser方法来验证用户的凭证。当我们调用LogonUser方法时,我们使用LOGON32_LOGON_NETWORK作为登录类型。WIN32登录问题

我们发现的问题是用户配置文件文件夹正在Web服务器的C:\ Users文件夹下创建。该文件夹似乎是在从未登录过的新用户第一次登录时创建的。随着登录到应用程序的新用户数量的增长,由于创建了大量新用户文件夹,磁盘空间不断缩小。

我需要得到认证(认证\密码锁\密码错误),其futher使用后回令牌和基于表现出不同的网页

有没有人看到了Win32 LogonUser的方法,这种行为逻辑是什么?

请回答下列问题:

是否有可能禁用此行为创建文件夹以2.78 MB的空间,为每个新用户,它吃了我的DISCK空间?

我已经尝试过LOGON32_LOGON_BATCH,但它在认证用户中给出错误1385。 对于与LOGON32_LOGON_BATCH相关的任何解决方案,您可以确认是否会停止在位置C:\ users创建文件夹。

而且任何可能的解决方案,我需要或者

我能够禁用文件夹位于C要创建:\用户或 任何其他选项,以验证用户哪些不会科瑞文件夹。

+0

你在使用ASP.Net 3.5吗? – 2010-05-11 00:17:08

+0

这是你第三次发布这个吗?你之前已经得到答案。请住手。 – bmargulies 2010-05-13 23:06:14

+1

dup:http://*.com/questions/2821545/why-does-logonuser-place-user-profiles-in-c-users-of-the-server dup:http://*.com/questions/2807277/question-on-win32-logonuser-api-and-the-logon-type – bmargulies 2010-05-13 23:08:16

MSDN documentation for LogonUser建议LOGON32_LOGON_BATCH作为登录类型的Web服务:

此登录类型是用于批处理 服务器,其中过程可能 执行代表用户的不 他们的直接干预。此类型 也适用于更高性能的服务器 ,该服务器一次处理多个明文 身份验证尝试,例如邮件或Web服务器等 。 LogonUser函数 不缓存 此登录类型的凭据。

你试过吗?

+0

我已经尝试过LOGON32_LOGON_BATCH,但是它在给用户进行身份验证时给予了1385。 – 2010-05-11 22:15:19

+0

我已经试过LOGON32_LOGON_BATCH,但是在验证用户时给出了错误代码1385 – 2010-05-11 22:27:49

通过LOGON32_LOGON_BATCH并授予用户使用组策略在该计算机上作为批处理作业登录的权限。

+0

文件夹的大小约为2.87MB,它占用磁盘空间,所以这个解决方案不适合我。你能建议任何其他解决方案吗? – 2010-05-12 19:25:35

+0

这个答案应该可以解决你的问题。你试过了吗? – SLaks 2010-05-12 19:48:41

你不写任何有关产品版本(你使用的.NET,Windows服务器)的信息,你的问题的最佳答案可以依赖于此。此外,解决方案的最佳方式取决于登录后您想要如何处理用户令牌。你真的想使用这个令牌还是只想验证用户?所以我试着回答你的问题。

一般来说,错误1385(ERROR_LOGON_TYPE_NOT_GRANTED)指以下(见http://support.microsoft.com/kb/155012/en):

用户已经请求类型登录的, 诸如交互式或网络中, 未授予。管理员可以通过 控制谁可以通过网络以交互方式登录 。

有可禁用/在你的情况下启用SE_BATCH_LOGON_NAMESE_DENY_BATCH_LOGON_NAME(NTSecAPI.h)权限(见http://msdn.microsoft.com/en-us/library/bb545671%28VS.85%29.aspx的说明)。使用以管理员权限启动的Process Explorer(请参阅http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)查看哪些权限具有某个进程以及哪些权限已启用(请参阅进程的“安全”选项卡)。如果您用于应用程序池的帐户没有授予SE_BATCH_LOGON_NAME或在拨打LogonUser之前未启用此权限,则应在程序中添加相应的代码。

顺便说一下,有时候你并不是真的想用一个用户帐户做很多事情,只想验证密码。要做到这一点,您可以使用SSPI中的旧方法(请参阅http://support.microsoft.com/kb/180548/en),这些内容在LogonUser实现中使用。这种方式是the most smart and quick way来验证我知道的用户帐户。

有关.NET 2.0中SSPI用法的更多信息,您可以查看“SSPI解决方法”(参见http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/HowToGetATokenForAUser.html)。

+0

我与LogonUser()调用完全相同的问题。你能否让我知道在AD中改变什么? – user216652 2013-03-06 19:18:03

+0

@ user216652:如果您在新问题中详细描述*您的问题*,并在下一条评论中发布问题链接,那会更好。你的程序做什么?它是Windows服务,ASP.NET应用程序还是......?您需要在某个帐户进行验证,您现在要做什么等等。 – Oleg 2013-03-06 19:29:07