2010-05-13 174 views
3

我們已經開發了一個帶有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://stackoverflow.com/questions/2821545/why-does-logonuser-place-user-profiles-in-c-users-of-the-server dup:http://stackoverflow.com/questions/2807277/question-on-win32-logonuser-api-and-the-logon-type – bmargulies 2010-05-13 23:08:16

回答

2

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

4

通過LOGON32_LOGON_BATCH並授予用戶使用組策略在該計算機上作爲批處理作業登錄的權限。

+0

文件夾的大小約爲2.87MB,它佔用磁盤空間,所以這個解決方案不適合我。你能建議任何其他解決方案嗎? – 2010-05-12 19:25:35

+0

這個答案應該可以解決你的問題。你試過了嗎? – SLaks 2010-05-12 19:48:41

1

你不寫任何有關產品版本(你使用的.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