我想驗證Active Directory中的MVC Web應用程序(C#)的憑據我正在寫在Visual Studio的Mac上。在尋找答案時,我注意到了很多NotImplementedExceptions和其他奇怪的事件。 這裏是我嘗試過的東西和失敗的東西(非全面的)列表。登錄驗證對Active Directory C# - Visual Studio的Mac
首先,此代碼:
string domainAndUsername = domain + @"\" + username;
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
try
{
//Bind to the native AdsObject to force authentication.
// This line throws a not implemented exception
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry)
{
Filter = "(SAMAccountName=" + username + ")"
};
search.PropertiesToLoad.Add("cn");
Console.WriteLine(search.ToString());
SearchResult result = search.FindOne();
//Debug.WriteLine(result.ToString());
if (null == result)
{
return false;
}
//Update the new path to the user in the directory.
_path = result.Path;
_filterAttribute = (string)result.Properties["cn"][0];
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}
return true;
線object obj = entry.NativeObject
拋出一個NotImplementedException
我試着註釋掉行(因爲obj
從未在其他地方使用),但無濟於事。我也嘗試過非常類似代碼的其他變體。
我嘗試另一條路線是這樣的代碼:
var creds = new NetworkCredential(username, password);
var srvid = new LdapDirectoryIdentifier(adPath);
// This line throws a NotImplementedException
var conn = new LdapConnection(srvid, creds);
try
{
conn.Bind();
}
catch (Exception)
{
return false;
}
conn.Dispose();
return true;
與其他同樣想法的變化。該生產線var conn = new LdapConnection(srvid, creds);
拋出一個NotImplementedException
最後,我去了一個更簡單的途徑和所用
Membership.ValidateUser(model.username, model.password)
由於這是一個網絡API,我使用的控制器。這需要Web.config available here中的一些代碼。它也會拋出一個NotImplementedException
。
那麼這三種常用方法都依賴於尚未在VS for Mac中實現的相同底層函數嗎?還是有我失蹤的東西?此外,如果有人可以提供任何解決方法,它將非常感激。
謝謝!
您只能在此階段通過Novell Ldap庫手動實現該功能。微軟正在爲跨平臺'System.DirectoryServices'工作。NET Core,但是否會將其覆蓋範圍擴展到Mono還不得而知。 –
這個問題可能有幫助: https://stackoverflow.com/questions/37330705/working-with-directoryservices-in-asp-net-core – bnem
感謝您的評論傢伙。我正在嘗試Novell.Directory.Ldap。我得到了'無效的證書'錯誤,我認爲這是一個正確的方向。 – rtherman