问题标签 [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.
.net - 使用 PrincipalContext 验证来自 Azure AD 的用户凭据
如何使用 PrincipalContext 验证用户名和密码对 Azure AD 帐户是否有效?我努力了:
但我收到错误:“LDAP 服务器不可用。”
用户名格式为:“AzureAD\\Username”
PrincipalContext 的构造函数应该如何连接到 Azure 并确认用户名和密码?
c# - PrincipalContext ValidateCredentials 异步
我想让 PrincipalContext ValidateCredentials 方法异步。
如您所见,我正在尝试使用 Active Directory 对用户进行身份验证,但似乎 pc.ValidateCreadentials 是一种同步方法。我怎样才能使它异步?
c# - 调用 ValidateCredentials 导致错误(使用已知正确的用户名/密码),域服务器上显示事件 4625
我在域上下文下对 PrincipalContext.ValidateCredentials 进行了一个非常简单的调用,导致未知原因导致误报。
当我在 AD 服务器上查看安全审计时,它显示了一个事件 ID 为 4625 的审计失败事件,声称用户没有权限登录机器。我可以使用这些凭据登录到加入此域的终端服务器。在此之前,我对运行应用程序的帐户进行了成功审核,并且我能够成功验证其他用户的凭据。但是,我无法找到成功验证的帐户和未成功验证的帐户之间的任何区别,它们是所有相同域安全组的一部分。
帐户无法登录。
主题:安全 ID:NULL SID 帐户名称:- 帐户域:- 登录 ID:0x0
登录类型:3
登录失败的帐户:安全 ID:NULL SID 帐户名称:[已编辑] 帐户域:
失败信息: 失败原因: 用户不允许登录此计算机。状态:0xC000006E 子状态:0xC0000070
进程信息:调用者进程 ID:0x0 调用者进程名称:-
网络信息:工作站名称:[已编辑] 源网络地址:[已编辑] 源端口:62667
详细的身份验证信息:登录过程:NtLmSsp 身份验证包:NTLM Transited Services:- 包名称(仅限 NTLM):- 密钥长度:0
当登录请求失败时会生成此事件。它是在尝试访问的计算机上生成的。
主题字段指示请求登录的本地系统上的帐户。这通常是服务器服务等服务,或 Winlogon.exe 或 Services.exe 等本地进程。
登录类型字段指示所请求的登录类型。最常见的类型是 2(交互式)和 3(网络)。
进程信息字段指示系统上的哪个帐户和进程请求登录。
网络信息字段指示远程登录请求的来源。工作站名称并非始终可用,在某些情况下可能留空。
身份验证信息字段提供有关此特定登录请求的详细信息。- 中转服务指示哪些中间服务参与了此登录请求。- 包名称表示在 NTLM 协议中使用了哪个子协议。- 密钥长度表示生成的会话密钥的长度。如果没有请求会话密钥,这将为 0。
我似乎在这里失去了理智,任何可以提供的帮助将不胜感激。如果此时存在,我会考虑使用 PrincipalContext 的替代方案。
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 方法绑定到构造函数中指定的服务器。如果用户名和密码参数为空,则验证构造函数中指定的凭据。
我创建到服务器的连接。
然后为了测试我尝试的连接:
它具有不同的行为:
文档让我相信这些调用的行为应该相同,但我遇到了不同的结果。为什么会这样?测试连接的正确方法是什么?
c# - 如何验证传递给“PrincipalContext”的凭据
这是对我之前的问题的跟进。
问题
验证传递给 a 的凭据的正确方法是
PrincipalContext
什么?
背景
在我的应用程序中,我实例化了一个PrincipalContext
using PrincipalContext(ContextType, String, String, String)
. 当凭据不正确(或提供的凭据不适用于管理员)时,我有许多集成测试失败,因此我希望能够捕捉到这一点。
如果凭证无效,则PrincipalContext.ConnectedServer
抛出一个System.DirectoryServices.DirectoryServicesCOMException
,但是直到第一次使用 PrincipalContext 才发现。
异常详情:
我试过的
我最初的想法是在创建时检查凭据,但是如果我们使用PrincipalContext
不同的凭据重用,我们会得到一个System.DirectoryServices.Protocols.LdapException
.
异常详情:
什么是正确的方法?
有没有公认的方法来测试这个?我应该尝试分配PrincipalContext.ConnectedServer
给局部变量并捕获异常吗?
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
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
问题的原因是什么,是否有任何可用的解决方案?
asp.net - asp.net mvc中的原理上下文返回空值
我正在尝试使用原则上下文连接活动目录。我试过下面的代码。
此代码在客户端的本地计算机上运行良好,但在客户端服务器上上传后,它将引发空引用异常。
任何的想法。谢谢。
c# - c# GroupPrincipal.FindByIdentity 找到组,但是使用 GetMembers 时出错 - 服务器上没有这样的对象
此代码过去一年运行良好,现在仍在运行,但我只有 4 个组会产生此错误...
代码很简单:
当这些特定的组来搜索时,我得到了组并且可以在组对象变量中看到它的描述,但是当得到它的成员时,我得到一个错误消息:
base: "服务器上没有这样的对象。\r\n"
错误代码:-2147016656
同样,这只发生在来自同一域和同一 OU 的 4 个特定组中。这只是几天前才开始的,我没有更改任何内容,没有权限,代码中没有任何内容,很奇怪......
有任何想法吗 ?
c# - 创建具有唯一用户名的新 AD 用户
我有一个 Web 视图,它采用一个人的名字和姓氏,并尝试使用名字的第一个字母 + 姓氏的命名上下文在活动目录中创建一个新用户。这很好用,但是当创建多个具有相同姓氏和名字且以相同字符开头的用户时(即,Andy Gordan => agordan | Alex Gordan => agordan),会抛出错误,因为已经有相同用户名的用户存在。
如何在下方添加 if/else 语句,检查活动目录以查看用户名是否已存在,如果存在,则在名字后添加中间首字母(Alex M Gordan => agordan,下一个用户输入:Andy M Gordan = > 安戈尔丹)。