从专有名称中提取通用名 [英] Extract Common Name from Distinguished Name
问题描述
有没有在.NET中调用解析CN从RFC-2253连接codeD专有名称?我知道有一些第三方的库做到这一点,但我会preFER尽可能使用本地.NET库。
字符串的例子EN codeD DN
CN = L。鹰,O =苏\,Grabbit和银行经营,C = GB
CN =杰夫·史密斯,OU =销售额,DC = Fabrikam目录,DC = COM
在.NET源$ C $周围挖C中,它看起来像有一个内部实用工具类,可以的解析专有名称的到他们的不同组件。不幸的是,工具类是不公开的,但你可以使用反射来访问它:
字符串DN =CN = TestGroup,OU =组,OU = UT-SLC,OU = US,DC =公司,DC = COM;
装配dirsvc =的Assembly.Load(System.DirectoryServices中);
键入asmType = dirsvc.GetType(System.DirectoryServices.ActiveDirectory.Utils);
MethodInfo的MI = asmType.GetMethod(GetDNComponents,BindingFlags.NonPublic可| BindingFlags.Static);
字符串[]参数= {DN};
VAR测试= mi.Invoke(NULL,参数);
//test.Dump("test1");//shows使用Linqpad时,详细介绍
//转换专有名称(DN),以相对专有名称(RDN)
MethodInfo的MI2 = asmType.GetMethod(GetRdnFromDN,BindingFlags.NonPublic可| BindingFlags.Static);
VAR测试2 = mi2.Invoke(NULL,参数);
//test2.Dump("test2");//shows使用Linqpad时,详细介绍
结果是这样的:
// test1的是内部的分量结构阵列上的名称/值作为字符串
名称值
CN TestGroup
OU组
欧UT-SLC
欧美
DC公司
DC COM
// test2的是一个字符串,CN = RDN
CN = TestGroup
请不这是一个内部实用工具类,并在以后的版本可能会改变。
Is there a call in .NET that parses the CN from a rfc-2253 encoded distinguished name? I know there are some third-party libraries that do this, but I would prefer to use native .NET libraries if possible.
Examples of a string encoded DN
CN=L. Eagle,O=Sue\, Grabbit and Runn,C=GB
CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=COM
After digging around in the .NET source code it looks like there is an internal utility class that can parse Distinguished Names into their different components. Unfortunately the utility class is not made public, but you can access it using reflection:
string dn = "CN=TestGroup,OU=Groups,OU=UT-SLC,OU=US,DC=Company,DC=com";
Assembly dirsvc = Assembly.Load("System.DirectoryServices");
Type asmType = dirsvc.GetType("System.DirectoryServices.ActiveDirectory.Utils");
MethodInfo mi = asmType.GetMethod("GetDNComponents", BindingFlags.NonPublic | BindingFlags.Static);
string[] parameters = { dn };
var test = mi.Invoke(null, parameters);
//test.Dump("test1");//shows details when using Linqpad
//Convert Distinguished Name (DN) to Relative Distinguished Names (RDN)
MethodInfo mi2 = asmType.GetMethod("GetRdnFromDN", BindingFlags.NonPublic | BindingFlags.Static);
var test2 = mi2.Invoke(null, parameters);
//test2.Dump("test2");//shows details when using Linqpad
The results would look like this:
//test1 is array of internal "Component" struct that has name/values as strings
Name Value
CN TestGroup
OU Groups
OU UT-SLC
OU US
DC company
DC com
//test2 is a string with CN=RDN
CN=TestGroup
Please not this is an internal utility class and could change in a future release.
这篇关于从专有名称中提取通用名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!