2016-04-08 48 views
0

我有一個REST API已經啓動並正在運行。現在我正在嘗試做一個日誌服務。在REST Web API上獲取Windows登錄的用戶

這個想法是在客戶端應用程序上登錄數據庫表中用戶所做的所有操作。

由於它用於內部使用(僅在Intranet上使用),因此我使用Windows身份驗證(<authentication mode="Windows" />)。

日誌服務已經在處理一個問題。我無法獲取登錄的用戶。

如果我在本地機器上運行API和客戶端應用程序,我可以獲取我的用戶。但是,當我發佈我不能。

我已經嘗試過:

string userName = WindowsIdentity.GetCurrent().Name; 

string userName = HttpContext.Current.User.Identity.Name; 

string userName = HttpContext.Current.Request.LogonUserIdentity.Name; 

string userName = Environment.UserName; 

我得到的各種用戶名(IUSRIIS APPPOOL\MyApiMyApi也是空白),但沒有登錄用戶的窗口。

我有Windows身份驗證在IIS上啓用

誰能告訴我這是否可能?如果是這樣,該怎麼做?

+1

你確定基本驗證是關閉的嗎?啓用Windows身份驗證還不夠,您還必須禁用基本身份驗證。然後基於HttpContext的應該工作。其他用於獲取在服務器上運行的進程的用戶名。 – Kevin

+0

是的,基本身份驗證和匿名身份驗證都關閉。 – lpfx

回答

0

在IIS中,在Authentication/Windows Authentication下,有一個「Providers ...」動作。點擊它並通過Negotiate移動NTLM。爲了獲得當前用戶的身份而不是應用程序池的身份,我必須在過去這樣做。

+0

我試過了,但沒有奏效。謝謝。 – lpfx

3

通過REST API推斷,您的意思是ASP.Net Web API。

如果是這樣,User.Identity.Name將返回當前通過身份驗證的用戶的用戶名。

如果您尚未將[授權]屬性添加到您的控制器(或特定操作),那麼我會這樣做以禁止匿名訪問,這可能會向您顯示您的配置設置不正確。如果是這種情況(就像我推測的那樣),那麼你執行的這些測試就是匿名連接的用戶。

+0

如果我將'[Authorize]'屬性添加到控制器並從我的客戶端應用程序調用某個動作,則會出現401(未授權)錯誤。但是,如果我在瀏覽器上輸入網址,我會提示輸入我的憑證。如何在第一次客戶端調用API時獲得提示? – lpfx

+0

客戶端是kendo ui(javascript)的應用程序。 – lpfx

+0

假設您的ACL設置正確,只有IE默認通過NTLM而不提示。假設你沒有用IE做測試。對於任何其他瀏覽器,您必須鍵入這些憑據,或者使用瀏覽器擴展名和白名單來通過NTLM憑據。 – Bon