asp.net – System.DirectoryServices – 服务器不可操作
|
我收到一个网站的错误,我使用 Windows身份验证. 奇怪的东西: >仅当用户尚未保存到数据库(新的未知用户)时才会发生 这是我在日志邮件中得到的:
这是我如何实现DirectorySearch: private void SaveUser(string windowsUserName)
{
string[] domainAndUser = windowsUserName.Split('');
string domain = domainAndUser[0];
string username = domainAndUser[1];
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain);
DirectorySearcher search = new DirectorySearcher(entry);
try
{
// Bind to the native AdsObject to force authentication.
search.Filter = "(SAMAccountName=" + username + ")";
search.PropertiesToLoad.Add("cn");
search.PropertiesToLoad.Add("sn");
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
if (result == null)
{
throw new Exception("No results found in Windows authentication.");
}
User userToSave = new User();
userToSave.FirstName = (String) result.Properties["givenName"][0];
userToSave.LastName = (String) result.Properties["sn"][0];
userToSave.Email = (String) result.Properties["mail"][0];
userToSave.Username = windowsUserName;
userToSave.Guid = Guid.NewGuid();
SaveUser(userToSave);
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message,ex);
}
finally
{
//Dispose service and search to prevent leek in memory
entry.Dispose();
search.Dispose();
}
}
如果需要更多的代码示例,请告诉我. 解决方法您的问题是您正在使用“简单”域名进行绑定 – 这在LDAP中不起作用.实际上,如果你尝试绑定到LDAP:// MyDomain,你真正在做的是试图绑定到名为MyDomain的服务器.您需要一个有效的LDAP绑定字符串,如LDAP:// dc = yourdomain,dc = local或something. 要了解您的默认LDAP绑定上下文是什么,请使用此代码段: DirectoryEntry deRoot = new DirectoryEntry("LDAP://RootDSE");
if (deRoot != null)
{
string defaultNamingContext = deRoot.Properties["defaultNamingContext"].Value.ToString();
}
一旦你有这个字符串 – 将它用作你的LDAP服务器的绑定字符串. 如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间.在这里阅读全文: > Managing Directory Security Principals in the .NET Framework 3.5 基本上,您可以定义域上下文并轻松查找AD中的用户和/或组: // set up domain context -- no domain name needed,uses default domain
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx,username);
if(user != null)
{
// do something here....
}
新的S.DS.AM让您很容易在广告中与用户和群体一起玩耍! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何设置html.EditorFor helper的大小?
- asp.net – ADO.NET实体数据模型缺少Visual Studio 2015社区
- asp.net-mvc-3 – 坚持使用asp.net mvc 3.0脚手架,以防多对
- asp.net – 访问视图Mvc.net中的路由值
- asp.net-mvc – CssRewriteUrlTransform没有被调用
- asp.net – 如何预编译Web应用程序项目?
- ASP.NET MVC 5(VS2013 final):使用OWIN进行Facebook登录失
- asp.net-core – 如何使.NET Core类库从.NET 4.6项目引用?
- .net – 为什么事件处理程序只能在IHttpModule初始化期间绑
- asp.net-mvc – 尝试继承RegularExpressionAttribute,不再验
