问题标签 [principalcontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1071 浏览

.net - 使用 PrincipalContext 验证来自 Azure AD 的用户凭据

如何使用 PrincipalContext 验证用户名和密码对 Azure AD 帐户是否有效?我努力了:

但我收到错误:“LDAP 服务器不可用。”

用户名格式为:“AzureAD\\Username”

PrincipalContext 的构造函数应该如何连接到 Azure 并确认用户名和密码?

0 投票
0 回答
378 浏览

c# - PrincipalContext ValidateCredentials 异步

我想让 PrincipalContext ValidateCredentials 方法异步。

如您所见,我正在尝试使用 Active Directory 对用户进行身份验证,但似乎 pc.ValidateCreadentials 是一种同步方法。我怎样才能使它异步?

0 投票
1 回答
694 浏览

c# - 调用 ValidateCredentials 导致错误(使用已知正确的用户名/密码),域服务器上显示事件 4625

我在域上下文下对 PrincipalContext.ValidateCredentials 进行了一个非常简单的调用,导致未知原因导致误报。

当我在 AD 服务器上查看安全审计时,它显示了一个事件 ID 为 4625 的审计失败事件,声称用户没有权限登录机器。我可以使用这些凭据登录到加入此域的终端服务器。在此之前,我对运行应用程序的帐户进行了成功审核,并且我能够成功验证其他用户的凭据。但是,我无法找到成功验证的帐户和未成功验证的帐户之间的任何区别,它们是所有相同域安全组的一部分。

帐户无法登录。

主题:安全 ID:NULL SID 帐户名称:- 帐户域:- 登录 ID:0x0

登录类型:3

登录失败的帐户:安全 ID:NULL SID 帐户名称:[已编辑] 帐户域:

失败信息: 失败原因: 用户不允许登录此计算机。状态:0xC000006E 子状态:0xC0000070

进程信息:调用者进程 ID:0x0 调用者进程名称:-

网络信息:工作站名称:[已编辑] 源网络地址:[已编辑] 源端口:62​​667

详细的身份验证信息:登录过程:NtLmSsp 身份验证包:NTLM Transited Services:- 包名称(仅限 NTLM):- 密钥长度:0

当登录请求失败时会生成此事件。它是在尝试访问的计算机上生成的。

主题字段指示请求登录的本地系统上的帐户。这通常是服务器服务等服务,或 Winlogon.exe 或 Services.exe 等本地进程。

登录类型字段指示所请求的登录类型。最常见的类型是 2(交互式)和 3(网络)。

进程信息字段指示系统上的哪个帐户和进程请求登录。

网络信息字段指示远程登录请求的来源。工作站名称并非始终可用,在某些情况下可能留空。

身份验证信息字段提供有关此特定登录请求的详细信息。- 中转服务指示哪些中间服务参与了此登录请求。- 包名称表示在 NTLM 协议中使用了哪个子协议。- 密钥长度表示生成的会话密钥的长度。如果没有请求会话密钥,这将为 0。

我似乎在这里失去了理智,任何可以提供的帮助将不胜感激。如果此时存在,我会考虑使用 PrincipalContext 的替代方案。

0 投票
1 回答
892 浏览

c# - 使用 `ValidateCredentials(null, null)` 测试 `PrincipalContext` 的行为异常

我需要验证用于连接到 AD 服务器的凭据。如果如果将无效凭据传递给PrincipalContext(ContextType, String, String, String),则PrincipalContext.ConnectedServer抛出一个System.DirectoryServices.DirectoryServicesCOMException在第一次使用时发现的PrincipalContext.

我正在尝试测试凭据,PrincipalContext.ValidateCredentials(null, null)但我遇到了问题。根据.NET Core 2.0 文档

ValidateCredentials 方法绑定到构造函数中指定的服务器。如果用户名和密码参数为空,则验证构造函数中指定的凭据。

我创建到服务器的连接。

然后为了测试我尝试的连接:

它具有不同的行为:

文档让我相信这些调用的行为应该相同,但我遇到了不同的结果。为什么会这样?测试连接的正确方法是什么?

0 投票
1 回答
3598 浏览

c# - 如何验证传递给“PrincipalContext”的凭据

这是对我之前的问题的跟进。

问题

验证传递给 a 的凭据的正确方法是PrincipalContext什么?

背景

在我的应用程序中,我实例化了一个PrincipalContextusing PrincipalContext(ContextType, String, String, String). 当凭据不正确(或提供的凭据不适用于管理员)时,我有许多集成测试失败,因此我希望能够捕捉到这一点。

如果凭证无效,则PrincipalContext.ConnectedServer抛出一个System.DirectoryServices.DirectoryServicesCOMException,但是直到第一次使用 PrincipalContext 才发现。

异常详情:

我试过的

我最初的想法是在创建时检查凭据,但是如果我们使用PrincipalContext不同的凭据重用,我们会得到一个System.DirectoryServices.Protocols.LdapException.

异常详情:

什么是正确的方法?

有没有公​​认的方法来测试这个?我应该尝试分配PrincipalContext.ConnectedServer给局部变量并捕获异常吗?

0 投票
0 回答
664 浏览

c# - 使用 PrincipalContext 查找用户的 AD 组时出错

我有一种情况,我需要递归查找用户的 AD 组。

例如 :

根据层次结构,UserA 的 Groups 是 Group1, Group2, Group3

为了通过代码找到它,我使用了以下方法:

这种方法会递归地给我所有的组,但是对于一个用户来说它失败了,并且给出了如下的异常:

System.DirectoryServices.AccountManagement.dll 中发生“System.DirectoryServices.AccountManagement.PrincipalOperationException”

附加信息:尝试检索授权组时,发生错误 (1358)。

这是完整的 StackTrace :

System.DirectoryServices.AccountManagement.PrincipalOperationException 未处理 ErrorCode=0 HResult=-2146233087 消息=尝试检索授权组时,发生错误 (1358)。源=System.DirectoryServices.AccountManagement

StackTrace:在 System.DirectoryServices.AccountManagement.AuthZSet..ctor(字节 [] userSid,NetCred 凭据,ContextOptions contextOptions,字符串 flatUserAuthority,StoreCtx userStoreCtx,对象 userCtxBase)

在 System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) 在 System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

我使用的另一种方法是:

这不会引发任何异常并为所有用户完美运行,但在我的情况下它只返回即时组,即 Group3

我在使用 GetAuthorisationGroups 时遇到的问题是 UserPrincipal 获得的专有名称中存在特殊字符。

这里的问题是当 [Distinguished Name][2] ofUserPrincipal包含特殊字符(在我的情况下为逗号)时,它会引发异常。在我的情况下,专有名称是:

CN=史密斯\,约翰,DC=mydomain,DC=com

这里反斜杠被用作UserPrincipal自己添加的转义字符。

如果 [Distinguished Name][2] 不包含任何特殊字符,则函数 [GetAuthorizationGroups()][1] 可以正常工作。例如

CN=Smith John,DC=mydomain,DC=com

问题的原因是什么,是否有任何可用的解决方案?

我在使用GetAuthorizationGroups()方法的第一种方法中缺少什么?

错误代码 1358 的原因是什么?

GetAuthorisationGroups()除了类之外,还有其他递归查找组的好方法吗UserPrincipal

0 投票
0 回答
100 浏览

c# - 当 UserPrincipal 中的专有名称包含特殊字符(在我的情况下为逗号)时,UserPrincipal.GetAuthorizationGroups() 抛出异常

我有一种情况,我需要递归查找用户的 AD 组。例如,UserA 是 Group3 的一部分,Group3 是 Group2 的一部分,Group2 是 Group1 的一部分 所以,UserA 是 Group3、Group2、Group1 的一部分。

现在,要查找用户的所有组,我在代码中使用了 GetAuthorizationGroups()

这里的问题是当Distinguished Name ofUserPrincipal包含特殊字符(在我的情况下是逗号)时,它会引发异常。在我的情况下,专有名称是:

CN=史密斯\,约翰,DC=mydomain,DC=com

这里反斜杠被用作UserPrincipal自己添加的转义字符。

如果专有名称不包含任何特殊字符,则函数GetAuthorizationGroups()可以正常工作。例如

CN=Smith John,DC=mydomain,DC=com

问题的原因是什么,是否有任何可用的解决方案?

0 投票
1 回答
313 浏览

asp.net - asp.net mvc中的原理上下文返回空值

我正在尝试使用原则上下文连接活动目录。我试过下面的代码。

此代码在客户端的本地计算机上运行良好,但在客户端服务器上上传后,它将引发空引用异常。

任何的想法。谢谢。

0 投票
1 回答
314 浏览

c# - c# GroupPrincipal.FindByIdentity 找到组,但是使用 GetMembers 时出错 - 服务器上没有这样的对象

此代码过去一年运行良好,现在仍在运行,但我只有 4 个组会产生此错误...

代码很简单:

当这些特定的组来搜索时,我得到了组并且可以在组对象变量中看到它的描述,但是当得到它的成员时,我得到一个错误消息:

base: "服务器上没有这样的对象。\r\n"

错误代码:-2147016656

同样,这只发生在来自同一域和同一 OU 的 4 个特定组中。这只是几天前才开始的,我没有更改任何内容,没有权限,代码中没有任何内容,很奇怪......

有任何想法吗 ?

0 投票
0 回答
145 浏览

c# - 创建具有唯一用户名的新 AD 用户

我有一个 Web 视图,它采用一个人的名字和姓氏,并尝试使用名字的第一个字母 + 姓氏的命名上下文在活动目录中创建一个新用户。这很好用,但是当创建多个具有相同姓氏和名字且以相同字符开头的用户时(即,Andy Gordan => agordan | Alex Gordan => agordan),会抛出错误,因为已经有相同用户名的用户存在。

如何在下方添加 if/else 语句,检查活动目录以查看用户名是否已存在,如果存在,则在名字后添加中间首字母(Alex M Gordan => agordan,下一个用户输入:Andy M Gordan = > 安戈尔丹)。