如何使用用户主体上下文从 Active Directory 检索电话号码
此代码可完美地使用用户名和密码从Active Directory获取电话号码
public string GetPhone(string domain, string username, string pwd)
{
_path = "LDAP://" + domain;
string domainAndUsername = domain + @"\" + username;
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
string telephoneNumber = string.Empty;
try
{
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
SearchResult result = search.FindOne();
var myEntry = result.GetDirectoryEntry();
telephoneNumber = myEntry.Properties["telephoneNumber"].Value.ToString();
}
catch (Exception ex)
{
throw new Exception("Error obtaining phone number. " + ex.Message);
}
return telephoneNumber;
}
,但是,我只能在登录页面上访问用户密码。我确实正在生成用户上下文,尽管可以从应用程序中的任何位置访问( context.user
,它是 system.security.principal.iprincipal
类型)
,因此如何我可以使用已经可用的 context.user
对象从Active Directory获取手机吗?
非常感谢您
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您获得的
User
对象将具有用户的SID。这样,您可以使用 DirectoryEntry中的SID绑定LDAP路径:LDAP://
RefreshCache
是仅加载telephoneNumber
属性。否则,当您第一次使用.Properties
时,它将检索每个属性,这会浪费时间和带宽。The
User
object you get will have the SID of the user. With that, you can use the SID binding LDAP path inDirectoryEntry
:LDAP://<SID=XXXXX>
The use of
RefreshCache
is to load only thetelephoneNumber
attribute. Otherwise, when you first use.Properties
, it will retrieve every attribute, which is a waste of time and bandwidth.看起来我过度复杂化了一切,解决方案很简单
Looks like I overcomplicated everything and solution is quite simple