Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时自动检测到Active Directory_C#_.net_Active Directory_Account Management - Fatal编程技术网

C# 何时自动检测到Active Directory

C# 何时自动检测到Active Directory,c#,.net,active-directory,account-management,C#,.net,Active Directory,Account Management,我正在构建一个应用程序,它将通过Active Directory对用户进行身份验证。不重要,不添加或编辑用户,只是验证凭据。我发现很多关于这个的帖子-一些使用System.DirectoryServices.AccountManagement(.NET 3.5及以上版本)或使用LDAP DirectoryEntry 我想知道我是否必须指定广告服务器URL?测试时,我不需要指定任何内容 何时自动检测到AD服务器?何时需要指定URL 我可以打电话获取自动检测到的广告服务器URL吗 创建域Princi

我正在构建一个应用程序,它将通过Active Directory对用户进行身份验证。不重要,不添加或编辑用户,只是验证凭据。我发现很多关于这个的帖子-一些使用System.DirectoryServices.AccountManagement(.NET 3.5及以上版本)或使用LDAP DirectoryEntry

我想知道我是否必须指定广告服务器URL?测试时,我不需要指定任何内容

  • 何时自动检测到AD服务器?何时需要指定URL

  • 我可以打电话获取自动检测到的广告服务器URL吗


  • 创建域
    PrincipalContext
    DirectoryContext
    而不指定域或路径时,将使用当前上下文。i、 e.代码正在执行的帐户。如果代码是在不在域中的帐户下执行的,则会引发异常。这适用于在windows窗体应用程序或服务中运行的天气

    要针对域验证凭据,只需执行以下操作:

    public bool ValidateCredentials(string username, string password)
    {
        using (var principalcontext = new PrincipalContext(ContextType.Domain))
        {
            return principalContext.ValidateCredentials(username, password);
        }
    }
    
    然而,由于许多原因,这并不是最好的方法。例如,
    ValidateCredentials
    即使用户由于密码过期等原因无法登录,也可以返回true。其次,对于桌面应用程序使用active directory单点登录有一种更简单的方法:

    var currentUser = UserPrincipal.Current;
    

    这将返回当前用户的主体,无需重新验证,windows已经进行了验证,因此您已经知道该用户是有效的。

    原因有哪些?我不想只做当前用户,所以UserPrincipal.current将不起作用。我将允许我的用户以其他用户身份登录。你有什么建议吗?在同一个广告下有一个不同的域名怎么样?这样行吗?PrincipalContext oPrincipalContext=新PrincipalContext(ContextType.Domain,otherDomainName)@MikeTurner然后,只要当前用户是域的一部分,您就可以在我的回答中使用第一个代码示例,如果不是,请指定域、用户名和密码以用于身份验证检查。@SOS是,这样就可以了。如果存在信任,则仍然不需要域,但如果您正在检查的用户名包含域信息。@Ashigore最好不要这样做的其他原因是什么?