gpt4 book ai didi

c# - PrincipalContext.ValidateCredentials 总是返回 FALSE

转载 作者:可可西里 更新时间:2023-11-01 07:44:12 27 4
gpt4 key购买 nike

我有一个 MVC 应用程序需要根据 Active Directory 登录和验证用户。我正在使用 PrincipalContext.ValidateCredentials 方法,但始终获得 false 的身份验证。

连接到服务器没问题。问题似乎出现在 ValidateCredentials 中。

这是我的代码:

public static bool IsAuthenticated(string domain, string username, string pwd) {
bool IsAuthenticated = false;

try {
PrincipalContext insPrincipalContext =
new PrincipalContext(ContextType.Domain, domain, "DC=c1w,DC=com");

username = "c1w\\" + username;

IsAuthenticated = insPrincipalContext.ValidateCredentials(username, pwd);
}
catch (Exception ex)
{
// Rethrow this exception
ExceptionPolicy.HandleException(ex, "Exception Policy");
}

return IsAuthenticated;
}

有人知道为什么会这样吗?

最佳答案

ValidateCredentials(string, string) 的工作原理如下:首先,它尝试使用 NegotiateSigning 进行身份验证密封 上下文选项。如果失败,它会再次尝试使用 SimpleBindSecureSocketLayer

问题是 NT4(又名“遗留”,又名“下层名称”)格式(DOMAIN\UserName,或者更准确地说,NetBiosName\SamAccountName ) 不适用于协商。但它确实适用于 SimpleBind。

那么在调用 2 参数 ValidateCredentials() 方法时可能发生的情况是,它首先使用 Negotiate 失败,因为它不喜欢 NT4 格式,然后在使用简单绑定(bind)时再次失败.

在我自己的测试中,我发现即使在回退到使用简单绑定(bind)后它仍然失败的原因是它不仅使用了 SimpleBind。它使用 SimpleBind 加上 SecureSocketLayer。这意味着如果 Active Directory 服务器未正确设置为使用 SSL(测试环境的常见场景),它仍然会失败。

正如其中一条评论中提到的,您永远、永远不想单独使用 SimpleBind(没有 SecureSocketLayer),否则您的密码将通过网络发送纯文本。

在野外,我看到一些 Active Directory 系统根本不允许使用简单绑定(bind),因此您必须使其与协商一起使用。

我找到了两种方法来处理这个问题:

1) 如果一切都发生在同一个域中,您应该能够仅使用用户名(SAM 帐户名称)调用 ValidateCredentials,而忽略“DOMAIN\”部分。然后,它将在第一次与 Negotiate 一起正常工作。

2) 如果域部分很重要,因为可能涉及多个域(即 Domain1\UserADomain2\UserA 是不同的人),那么它会得到一个有点复杂。在这种情况下,我最终要做的是将 NT4 名称 (DOMAIN\User) 转换为“用户主体名称”格式(例如 LogonName@domain.com)。有几种不同的方法可以做到这一点。最简单的可能是使用 UserPrincipal.FindByIdentity() 的 3 参数重载,然后在结果中获取 UserPrincipalName 属性的值。另一种方法是使用 DirectorySearcher 并在 LDAP://domain 中查询具有匹配 sAMAccountName 的用户的 userPrincipalName 属性 值。注意:此解决方案仅在涉及的所有域都在同一个林中时才有效。

关于c# - PrincipalContext.ValidateCredentials 总是返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com