用于连接到 Oracle Directory Server 企业版的 C# 脚本
Posted
技术标签:
【中文标题】用于连接到 Oracle Directory Server 企业版的 C# 脚本【英文标题】:C# script to connect to Oracle Directory Server Enterprise Edition 【发布时间】:2014-09-18 15:37:08 【问题描述】:我尝试使用 C# 脚本连接到 Oracle Directory Server Enterprise Edition 到目前为止,我几乎没有成功。 我收到 未知错误 (0x80005000) 错误消息 有人可以告诉我我做错了什么。我一直在研究网络,大多数在线板说这个错误消息是因为路径中的 LDAP 需要大写字母。 如您所见,我已经做到了,但仍然没有运气。
下面是我的代码
private static readonly string PATH = "LDAP://LDAPDEV.example.com:389/o=example.com";
private static readonly string USERNAME = uid=SERVICE_USR,ou=ApplicationIDs,o=example.com";
private static readonly string PASSWORD = "test1234";
string DN = "";
// connect to determine proper distinguishedname
DirectoryEntry Entry = new DirectoryEntry(Path, USERNAME, PASSWORD, AuthenticationTypes.None);
try
// Bind to the native AdsObject to force authentication.
Object obj = Entry.NativeObject;
DirectorySearcher Search = new DirectorySearcher(Entry);
Search.ReferralChasing = ReferralChasingOption.All
catch (Exception ex)
throw new Exception("Error looking up distinguishedname. ", ex);
finally
anonymousEntry.Close();
return DN;
string sDomain="LDAPDEV.example.com:389";
string sDefaultOU = @"o=example.com";
string sServiceUser = @"uid=user,ou=ApplicationIDs,o=example.com";
string sServicePassword = "password";
try
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ontextOptions.SimpleBind, sServiceUser,sServicePassword);
catch (Exception ex)
ex.Message;
【问题讨论】:
您的连接字符串看起来有点不对劲,您是否阅读过有关如何使用 C# 和LDAP
或 `Active Directory 格式化连接字符串的任何文档,这是一个可以用作示例的 *** 帖子***.com/questions/15157746/… 做更多的研究谢谢
感谢您的回复。你读过我的问题吗?您指向我的帖子似乎是指 AD 连接。我正在研究的非 AD 连接怎么样。当我按照说明操作时,我仍然收到错误 DirectoryEntry entry = new DirectoryEntry("LDAP://address/DC=examples,DC=com", "username", "passwd");我收到的错误是“指定了无效的 dn 语法”非常感谢您提供的任何帮助
尝试更改您的代码并使用PrincipalContext
,这样会容易得多..***.com/questions/11561689/…
使用 PrincipalContext,我得到一个“对象引用未设置为对象的实例。”下面的错误消息是我的代码我错过了什么吗?字符串 sDomain="LDAPDEV.example.com:389";字符串 sDefaultOU = @"o=example.com"; string sServiceUser = @"uid=user,ou=ApplicationIDs,o=example.com";字符串 sServicePassword = "通过";尝试 PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ontextOptions.SimpleBind, sServiceUser,sServicePassword); catch (Exception ex) ex.Message, ex);
无法从评论中清楚地阅读该代码,请将其作为对原始问题的修正
【参考方案1】:
您可以使用 PrincipalContext 获取一些信息,查看此工作示例并将值替换为您的域名值。
// if you are doing this via web application if not you can replace
// the Request/ServerVariables["LOGON_USER"]
// with Environment.UserName; this will return your user name like msmith for example so var userName = Environvironment.UserName;
var userName = Request.ServerVariables["LOGON_USER"].Split(new string[] "\\", StringSplitOptions.RemoveEmptyEntries);
var pc = new PrincipalContext(ContextType.Domain,"yourdomain.com",null, null);
var userFind = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, userName);
这基本上是您查看电子邮件地址 SamAccountName 等信息所需的全部内容。使用调试器检查 pc
变量和 userFind
变量中可用的所有属性值
【讨论】:
以上是关于用于连接到 Oracle Directory Server 企业版的 C# 脚本的主要内容,如果未能解决你的问题,请参考以下文章
将本地设备连接到 Azure Active Directory 域服务
使用 Active Directory 服务帐户从 .NET 连接到 SQL Server
使用 DataGrip - Active Directory 连接到 Azure 数据库
连接到 LDAPS(Active Directory)时出现 SSLHandshakeException