2016-10-04 118 views
0

我有一个ASP.NET MVC项目使用LDAP来验证用户。在开发服务器上,身份验证正在工作,但在生产中它不起作用。LDAP - 无法访问目录

我在生产之前部署了项目,LDAP没有问题。然后我再次部署,但在部署之前我更新了NuGet程序包管理器中的所有程序包。但它不起作用。

在我使用更新的软件包部署新项目之前,我已经在开发服务器上测试过它,没有出现任何问题。看来问题在于我无法访问生产服务器中的LDAP路径。

这里是<appSettings>部分:

<appSettings> 
    <add key="FolderPath" value="Files/" /> 
    <add key="DirectoryPath" value="LDAP://blabla.bla.bla:389/CN=Users,DC=blabla,DC=bla,DC=bla" /> 
    <add key="DirectoryDomain" value="bla" /> 
    <add key="UserPermission" value="blabla" /> 
</appSettings> 

下面是验证码

public bool AuthenticateUser(string domain, string username, string password, string LdapPath, string userPermission) 
{   
    string domainAndUsername = domain + @"\" + username; 

    DirectoryEntry entry = new DirectoryEntry(LdapPath, domainAndUsername, password); 

    try 
    { 
     Object obj = entry.NativeObject; 

     DirectorySearcher search = new DirectorySearcher(entry); 
     search.Filter = "(SAMAccountName=" + userPermission + ")"; 
     search.PropertiesToLoad.Add("cn"); 

     SearchResult result = search.FindOne(); 

     if (null == result) 
     { 
      return false; 
     } 

     LdapPath = result.Path; 
     string _filterAttribute = (String)result.Properties["cn"][0]; 

     if (_filterAttribute != userPermission) 
      return false; 
    } 
    catch (Exception ex) 
    { 
     return false; 
     throw new Exception("Error authenticating user. " + ex.Message); 
    } 

    return true; 
} 

开发和生产之间的唯一区别设置是DirectoryPathUserPermission值。

对不起,我的英语不好。

谢谢。

+0

执行它时会出现什么错误? – A3006

+0

@Anand对不起,我没有在生产服务器上记录错误。我认为问题出现在DirectoryEntry中,因为我试图在新项目上登录3次,然后将项目更改为旧项目,然后重新登录,然后运行。我这样做是因为我想查看DirectoryEntry是否在新项目中传递,因为如果我在LDAP中输入错误的3次传递,帐户将被锁定,因此即使将项目更改为新项目,我也无法登录。我希望你明白。谢谢。 – TeachMe

回答

0

愚蠢的问题首先,是开发和生产服务器使用相同的DNS?
如果不是,可以通过生产服务器使用的DNS解析“blabla.bla.bla”(只需尝试ping“blabla.bla.bla”)?

如果DNS无法解析名称,那么它将无法连接。