1
在.NET Core中處理Intranet應用程序,我想檢索連接到AD用戶的信息。目前,所有的身份驗證都由Windows處理,並且效果很好。有什麼方法可以從AD中提取數據?我想獲取諸如姓名,電子郵件,身份證等信息。在ASP .NET Core的Windows身份驗證中爲用戶獲取AD信息
在.NET Core中處理Intranet應用程序,我想檢索連接到AD用戶的信息。目前,所有的身份驗證都由Windows處理,並且效果很好。有什麼方法可以從AD中提取數據?我想獲取諸如姓名,電子郵件,身份證等信息。在ASP .NET Core的Windows身份驗證中爲用戶獲取AD信息
經過一週的嘗試,我最終使用Novell.Directory.Ldap軟件包取得了進展。排除故障要容易得多,而且我不必擔心運行雙重框架。
首先,進入包管理器控制檯,然後輸入:
Install-Package Novell.Directory.Ldap
這將包加載到您的項目,並在project.json添加。
這裏有幾個例子,但是在查看了其中的大多數例子之後,它們並不是我真正需要的。我結束了以下代碼:
var logPath = System.IO.Path.GetTempFileName();
var logWriter = System.IO.File.CreateText(logPath);
var user = "cn="+User.Identity.Name.Split('\\')[1];
logWriter.WriteLine("Current Ldap results:");
LdapConnection ADconn = new LdapConnection();
ADconn.Connect("DC IP address", 389);
ADconn.Bind("DOMAIN\\username", "password");
logWriter.WriteLine(ADconn.GetSchemaDN());
LdapSearchResults lsc = ADconn.Search("ou=OrgUnit,dc=DOMAIN,dc=com",
LdapConnection.SCOPE_SUB,
user, attrs, false);
while (lsc.hasMore())
{
LdapEntry nextEntry = null;
try
{
nextEntry = lsc.next();
}
catch (LdapException e)
{
logWriter.WriteLine("Error: " + e.LdapErrorMessage);
//Exception is thrown, go for next entry
continue;
}
DisplayName = nextEntry.getAttribute("displayName").StringValue;
UserADId = new Guid((byte[])(Array)nextEntry.getAttribute("objectGuid").ByteValue).ToString();
EMail = nextEntry.getAttribute("mail").StringValue;
logWriter.WriteLine(DisplayName);
logWriter.WriteLine(UserADId);
logWriter.WriteLine(EMail);
}
logWriter.Dispose();
//Procced
//While all the entries are parsed, disconnect
ADconn.Disconnect();
使用Windows身份驗證,這允許用戶的屬性從AD拉。一旦拉出,您可以將它們分配給變量並使用它們!它還會在您的C:\ Windows \ Temp \文件夾中創建一個TMP文件,充當部署中的調試器。
希望這可以幫助別人!
我認爲現在這是您唯一的選擇。 https://github.com/dsbenghe/Novell.Directory.Ldap.NETStandard –
如果你有通過project.json提供的4.6.1框架,你可以使用這個https://vikutech.blogspot.co.uk/2016/07 /ldap-with-aspnet-core-identity-in-mvc-core.html – K7Buoy
@ K7Buoy,這是針對.NET Core的,它與舊的.NET框架包不兼容。雖然謝謝! –