[英]LDAP Authentication for asp.net Web API
我正在使用ASP.NET技術進行WEB API項目。 該Web API需要從AD Active Directory檢查用戶,作為使用LDEP://
域身份驗證
[HttpGet]
public IHttpActionResult ListProperties(string domainName, string userName, string password)
{
try
{
using (DirectoryEntry dEntry = new DirectoryEntry("LDAP://" + domainName, userName, password))
{
DirectorySearcher dSearcher = new DirectorySearcher(dEntry)
{
Filter = "(&(objectClass=user)(mail=" + userName + "))"
};
SearchResult sResult = dSearcher.FindOne();
Dictionary<string, string> resultDictionary = new Dictionary<string, string>
{
{"Name", GetProperty(sResult,"cn")},
{"Email", GetProperty(sResult,"mail")}
};
return Ok(resultDictionary.ToList());
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
private string GetProperty(SearchResult searchResult, string propertyName)
{
if (searchResult.Properties.Contains(propertyName))
{
return searchResult.Properties[propertyName][0].ToString();
}
return string.Empty;
}
所以我只用ajax調用此方法進行測試
$(document).ready(function () {
$.ajax({
type: "GET",
url: "../api/xxxxxxx/ListProperties",
data: { domainName: "mydomain.xxx.xx", userName: "MyUsername", password: "MyPassword" },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) { console.log(JSON.stringify(data)); },
failure: function (data) { console.log(0); },
error: function (data) { console.log(1); }
});
});
不幸的是,我總是收到錯誤的請求或以下錯誤
System.Runtime.InteropServices.COMException HResult=0x8007203A Message=The server is not operational.
您是否可以向我提供如何解決此問題的指南,因為我以前從未使用過安全編程。
該錯誤歸因於您的應用程序無法綁定到LDAP服務器。 首先,我建議將目標LDAP服務器添加到您的查詢字符串中,然后正確設置查詢字符串的格式以表示域DN=
以及任何特定的組織單位OU=
等。
查詢字符串如下所示:
LDAP://contoso.local/DC=contoso,DC=local
我在下面創建了一個示例,該示例使用GET
(出於明顯的原因不建議使用)執行請求,並使用輔助方法將域轉換為友好的LDAP字符串。 響應將結果屬性輸出到JSON中,因此您可以控制自己認為合適的方式。
public JsonResult CheckAdCreds(string server, string domain, string username, string password)
{
try
{
var ldapDomainString = LdapStringFromDomain(domain, server);
using (var entry = new DirectoryEntry(ldapDomainString, username, password))
{
using (var search = new DirectorySearcher(entry))
{
search.Filter = $"(&(objectClass=user)(objectCategory=user) (sAMAccountName={username}))";
var result = search.FindOne();
return Json(result.Properties, JsonRequestBehavior.AllowGet);
}
}
}
catch (Exception ex)
{
return Json(new { Error = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
將域字符串轉換為LDAP友好字符串的Helper方法:
private string LdapStringFromDomain(string domain, string server)
{
var ldapString = $"LDAP://{server}/";
var domainArr = domain.Split('.');
for (int i = 0; i < domainArr.Length; i++)
{
ldapString += $"DC={domainArr[i]}";
if (i != domainArr.Length - 1)
ldapString += ",";
}
return ldapString;
}
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.