[英]Authenticate AD user with alternate UPN suffix
這個問題可能間接地與這里鏈接的問題相匹配。
我正在基於企業使用的基於Asp.Net 4.0的網站項目上工作。
網站上有一個表格,要求用戶提供其AD用戶名和密碼以及默認情況下選擇的域名。
我知道通過根域名對用戶進行身份驗證的方法。 但是有些用戶的域名(UPN后綴)已被修改。
例如 ,域名是xyz.com 。 因此,用戶通過user@xyz.com及其密碼進行身份驗證。 但是對於某些用戶,其名稱為user@abc.com 。
那么,如何用根域名以外的替代UPN后綴來驗證此類用戶呢?
如果第一次嘗試失敗(使用默認域名),請顯示帶有“域名”選項的表格。
或者,為域名提供一個文本框,該文本框會提前填充,用戶可以根據需要進行修改。
如果身份驗證失敗,請確保向他們顯示一條消息,指示他們需要注意您顯示的域名。
更新:
private void AuthenticateUser(string loginID, string pwd) {
var search = new DirectorySearcher(m_rootDir);
if (-1 < loginID.IndexOf("@")) {
search.Filter = "(&(objectClass=user)(SAMAccountName=" + loginID + "))";
} else { // this is their Common Name
search.Filter = "(&(objectClass=user)(cn=" + loginID + "))"; // Get User By Full Name
}
// more code here
}
經過大量的搜索和試用方法搜索后,我有理由提出了解決方案。
以下是Jorge de Almeida Pinto撰寫的 AD中的用戶主體名稱鏈接。 請從此處獲取有關iUPN和eUPN的詳細信息。
我將再次說明我的問題陳述,以使其更加清晰。
您可以從Active Directory With C#鏈接中獲得AD交互的想法,我發現它寫得很好。
作為一名程序員,我想編寫代碼以使這兩個用戶都從代碼登錄到AD。
我無法找到完美的根本原因。
但是我的猜測是,AD本身將域名放在@之后(按速率) 。 由於Alex的域名是dummy.com ,因此AD嘗試找到后綴為@ dummy.com的用戶。 並返回結果,因為找不到用戶。
您可能會有其他未經授權的用戶也可以通過這種方式進入的問題。 沒有! 因為密碼需要匹配。
為什么有效?
因為AD能夠在domain.com中找到Alex@domain.com的用戶。
我提供的解決方案僅在其他用戶具有相同域名的相同sAMAccountName的情況下有效。
但是,如果sAMAccountName本身設置為Alex@dummy.com,該怎么辦 。 因此,真正的解決方案是-
(1)根據UPN獲取sAMAccountName。
/// <summary>
/// Get sAMAccountName for matching UserPrincipalName (UPN)
/// </summary>
/// <param name="domain">Domain name</param>
/// <param name="userName">Username</param>
/// <returns></returns>
protected string GetSamUsername(string domain, string userName)
{
string samName;
using (var pc = new PrincipalContext(ContextType.Domain, domain))
{
var user = UserPrincipal.FindByIdentity(pc, userName); // Search for this user
if (user == null) return null; // If user is not there, why go forward
samName = user.SamAccountName;
}
return samName;
}
(2)現在,任何用戶均可登錄。
它還可以幫助我們驗證AD中用戶的身份。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.