簡體   English   中英

使用表單身份驗證獲取Windows用戶名的更好方法是什么?

[英]A better way to get a Windows Username using Forms Authentication?

我繼承了一個使用表單身份驗證的項目,但最近的功能請求要求我獲取某些用戶的Windows用戶名。

這是一個使用表單身份驗證的網站(我不想改變它,此時會有太多工作)但我有一個功能請求,允許我們的內部用戶更容易登錄(通常無需放入他們的密碼或用戶名)。

我當前的方法是可怕的,它涉及檢查IP地址以查看它們是否從我們的一個IP連接,如果是,將它們重定向到使用Windows身份驗證的單獨項目,然后將其重定向回原始頁面包含其用戶名的查詢字符串(如果我被迫繼續使用此方法,我可能需要加密它,盡管它仍然不如我想的那樣安全)。

我可以在我的應用程序中相對容易地執行Windows身份驗證,但是困難的部分是獲取Windows用戶名。 我無法弄清楚如何做到這一點,因此我的丑陋方法。

任何幫助將不勝感激。

編輯:我的輔助應用程序只是這樣做:

string username = HttpContext.Current.User.Identity.Name;
string retpath = Request.QueryString["retpath"];
Response.Redirect("http://" + retpath + "?id=" + username);

這篇文章包含了答案,(感謝vinodpthmn): http//msdn.microsoft.com/en-us/library/ms972958.aspx我在我的研究中找到了這篇文章的鏈接,但沒有一個有效! 很高興我終於能夠閱讀並解決我的問題了。

正如我所提到的,我只需要獲取客戶端的Windows用戶名,但結果證明這很麻煩,謝天謝地,實際的解決方案相對簡單。

首先,您需要創建一個額外的登錄頁面(我稱之為winlogin.aspx)並將其設置為Web.Config文件中的默認登錄頁面,如下所示:

<authentication mode="Forms">
      <forms name="something" defaultUrl="default.aspx" loginUrl="winlogin.aspx" protection="All" slidingExpiration="true" timeout="90"/>
    </authentication>

在winlogin.aspx.cs文件中,您可以對Windows用戶進行身份驗證並使用

FormsAuthentication.RedirectFromLoginPage(username, false/true);

將它們重定向到他們去的地方。 實際的winlogin.aspx頁面應為空白,用戶永遠不會看到它。

您需要將以下部分發布到測試Web服務器:在IIS管理器中訪問winlogin.aspx的文件屬性,並將WindowsAuthentication設置為true,將匿名身份驗證設置為false。 您還需要創建一個自定義401錯誤頁面指針(我的指向舊的Login.aspx頁面)。

可以使用Windows身份驗證登錄的用戶將這樣做,其他人將被重定向到舊的登錄頁面。

瞧!

但是有一些問題,你丟失了你的返回URL(你不能在自定義401錯誤頁面的鏈接中使用“=”,所以沒有任何東西可以被解析)所以你可能想要在人們設置cookie時被重定向到winlogin頁面並訪問表單登錄頁面中的cookie以適當地重定向用戶。

如果有人有任何疑問,我建議您閱讀上面鏈接的文章,或者隨時在這里提問。

謝謝大家的幫助!

您可以使用目錄服務

PrincipalContext pc = null;
UserPrincipal principal = null;
var username = User.Identity.Name;
pc = new PrincipalContext(ContextType.Domain, "give your domain name here");
principal = UserPrincipal.FindByIdentity(pc, userName);
var firstName = principal.GivenName ?? string.Empty;
var lastName = principal.Surname ?? string.Empty;

請添加System.DirectoryServices.AccountManagement的參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM