问题标签 [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.
c# - System.DirectoryServices.AccountManagement 和来自 LDAP 与 LDAPS 的错误消息
我有一些 C# 代码System.DirectoryServices.AccountManagement
用于允许用户更改其 Active Directory 用户帐户密码。它目前正在使用 LDAP (:389),出于安全目的,我想将其切换到 LDAPS (:636)。但是,当我切换到 LDAPS 时,返回给我的错误消息会发生变化并且变得不那么有用。
简而言之,这是问题:
如果我使用 LDAP (:389) 连接,我使用以下 ConextOptions
如果我使用 LDAPS (:636) 连接,我使用以下 ContextOptions
如果用户提供正确的当前密码和有效的新密码,则任一版本都可以更改密码。但是,例如,在用户输入了错误的当前密码的情况下,我收到的错误消息是不同的,并且在 LDAPS 的情况下不太有用:
LDAP(:389):
指定的网络密码不正确。(来自 HRESULT 的异常:0x80070056)
LDAPS(:636):
发生约束冲突。(来自 HRESULT 的异常:0x8007202F)
差异的关键似乎是ContextOptions.Signing
- 如果我没有指定 LDAP(:389) 连接,我会收到与 LDAPS(:636) 相同的错误消息。但是,如果我ContextOptions.Signing
为 LDAPS 指定 DC 拒绝响应。
ContextOptions.Signing
使用 LDAPS 时有什么方法可以使用吗?- 有没有其他方法可以在不使用的情况下获得更有意义的错误消息
ContextOptions.Signing
? ContextOptions.Sealing
说它使用 Kerberos 加密数据 - 我可以在 :389 上使用此选项来获得与使用 LDAPS 相同级别的安全性吗?文档的细节很少
c# - 在数据库中存储什么来识别 Active Directory 和本地帐户用户
我正在为需要同时使用 Active Directory 和本地计算机帐户的 WPF 应用程序编写权限系统;系统可能连接到网络,也可能不连接到网络。
用户可以使用 AD 登录或本地计算机登录来登录应用程序。应用程序将数据存储在 SQL Server Express 数据库中,并且每一行都有一个“所有者”。
该应用程序将仅显示登录用户“拥有”的行。
根据这个问题,用于识别用户的推荐数据是 LDAP objectGUID
,我可以使用下面的代码检索它并存储在 uniqueidentifier 列中。
但是,UserPrincipal.Guid
对于ContextType.MachineName
.
我可以存储一条可以引用 AD 帐户或本地帐户的信息吗?
或者我是否需要添加另一列来指定目录类型(AD/SAM)并使用另一列来存储不同的标识符(SID)?
c# - Windows 10 更新后 System.DirectoryServices.AccountManagement.PrincipalContext 损坏
在过去的几年里,我一直在使用这个小功能来验证用户凭据,没有任何问题。该createPrincipalContext
方法返回一个PrincipalContext
withContextType.Machine
和机器名称。
我的开发机器最近自动更新到最新版本的Windows 10,从那以后,principalContext.ValidateCredentials
一直抛出以下异常。
System.IO.FileNotFoundException:系统找不到指定的文件。
除了机器更新之外,没有其他任何改变。最近几天我一直在网上搜索可能导致问题的原因。
有没有人在确定可能是什么原因以及可能的解决方案方面有任何经验?
c# - 如何在源代码中使用加密密码进行目录服务身份验证
我编写了一个程序,通过 PrincipalContext 读取 Active Directory 中用户的 UserPrincipal。为此,需要对特权用户进行身份验证。目前,此身份验证的密码以明文形式保存在源代码中。出于安全原因,应将加密密码保存在源代码或其他文件中。有没有办法解决这个问题?
(这段代码最初来自这个网站)
adam - 通过 SSL 中的 LDAP 与 PrincipalContext 类的慢速 AD-LDS 连接
在我的开发机器上,我必须安装 AD-LDS。原则上它工作正常,但是第一次通过 PrincipalContext 类连接到 AD-LDS 非常慢(30 秒以上)。在我看来,它首先尝试连接到一些不存在的主机或目录,然后在超时(30 秒)后连接到我的 AD-LDS 并执行它应该做的事情。
我在使用 LDP.exe 和 SSL 连接时观察到的行为相同。但是,使用 ADSI-Edit,通过 SSL 进行连接非常快。通过非 SSL 连接也是如此。
我看了看是否能在提琴手中看到一些东西,但什么也没有。同样在事件日志中我什么也找不到。也许它与证书查找有关?它是使用 makecert 进行自签名的。
更新
与此同时,我观察到一件小事,可能会给出提示:在系统事件日志中,第一次建立与 AD-LDS 的 SSL 连接时,会出现以下消息:
在没有配置的 DNS 服务器响应后,名称 _ldap._tcp.[ ] 的名称解析machineName
超时
但是,消息只注册一次,但每次连接到服务器都需要 30 秒+。我也尝试在主机文件中输入相应的条目,但没有任何改变。
附加信息
证书可能不是问题,但可能有助于解决问题。因此,这里是我创建证书的方式(或多或少的货物代码):
根权限
服务器证书
创建后,我将根权限移至受信任的权限并授予所需的权限。
c# - 如何使用 C# 验证非管理员用户?
我创建了一个本地用户。(例如:mymachine\user1)。我不想将此用户添加到管理员组。
我使用以下 c# 代码来验证我的本地帐户:
但它给出了例外:
登录失败:用户在这台计算机上没有被授予请求的登录类型。
如果我以正确的方式做,请帮助我。
asp.net - UserPrincipal.FindByIdentity - 在 dev 上抛出错误
我正在使用 ASP.Net(使用 VB.Net)应用程序。在本地测试和工作此代码块执行得非常好。
然而,自从将它提升到我们的开发 Web 服务器进行初始测试后,我没有从 AD 获取用户电子邮件地址,而是收到此错误消息。
在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 在 System.DirectoryServices.DirectoryEntry.Bind()
在 System.DirectoryServices.DirectoryEntry.get_AdsObject() 在 System.DirectoryServices.PropertyValueCollection.PopulateList()
在 System.DirectoryServices.PropertyValueCollection.. ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
at System.DirectoryServices.AccountManagement .PrincipalContext.Initialize()
在 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext 上下文,类型 principalType,Nullable`1 identityType,字符串 identityValue,DateTime refDate)
在 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType (PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) at ChangeControl.HelpersSystem.GetEmail(String& uId) in C:\Work\Simon \ChangeControl\ChangeControl\HelperClasses\HelpersSystem.vb:第 24 行
我环顾四周,这是我想要做的最接近的事情
以前类似但不是相同的问题。 这也 非常相似,与我所拥有的解决方案相同,但不适用于我
我需要帮助的是我需要提供哪些其他变量,因为我也尝试过使用用户名和密码,但这也不起作用并给出了同样的错误消息。
我也试过没有IdentityType
太,但仍然遇到同样的问题。非常感谢任何和所有帮助。
c# - 使用 UserPrincipal 和 PrincipalCotext 类时出现错误“服务器无法运行”
我已经看到了很多关于这个问题的答案,但似乎没有一个适合我的。我在 AD 身份验证方面非常苦恼。情况看起来像这样。
我们洞穴三个域控制器。我们想连接正确的,这样我们就不会得到这个异常。情况是这样的:在我的本地机器上,我没有遇到任何问题,但是当我每次通过 AD 进行身份验证时部署到服务器上的 IIS 时,我都会收到此错误。这是我正在使用的代码。这是在我进行了几次更正检查以及来自 google 和 stackoverflow 的信息之后:
这是我获取 UserPrincipal 的地方,以便我有一些关于组的用户信息和类似的东西:
当我查看日志路径时,似乎这个问题不是来自 PrincipalContext,而是来自 UserPrincipal。关于 AD 有很多我不知道的事情,但这是我尝试过的:
- 将 IP 地址作为参数传递
- 传递您在代码中看到的域名
- 我也尝试过传递我实际上从控制器变量中获得的域控制器的 IP 地址。
似乎没有任何效果。正如我所提到的,我们有三个域 alfa。比方说,贝塔,伽玛。无论我尝试什么,我总是得到他试图连接到阿尔法的例外。有任何想法吗?很抱歉这个问题很长,但我尽量做到最具体。我还可以告诉您,当管理员将此 alfa 控制器添加到防火墙时,问题就会消失,但这并不好。我们依赖于这个控制器将永远存在的事实,但是当它死亡时该怎么办?我想让我的应用程序在那一刻说防弹:)
附言。我不想使用 DirectoryEntry 方法,因为它很痛苦,因为我必须知道所有查询内容等。如果这是唯一的方法,那么我将不胜感激一些简单的教程,也许会逐步解释这一点。
c# - 在 Active Directory 组中按查询查找用户
给定具有很多成员的特定组,我想在组内查询以查找具有 DisplayName 匹配的成员。
下面的代码是我想要完成的一个非功能示例。请注意,我不想先加载整个列表然后应用“位置”,我已经可以这样做了,而且速度很慢,因为组很大。
另外,上下文是我真实代码中的域,我故意替换了它。
c# - PrincipalContext 抛出对象引用未设置为实例
PrincipalContext 对除一个以外的所有客户端都运行良好..我能够使用 Softerra LDAP 连接到 path = abcdev.xyz.com:636 但不确定为什么它会抛出空对象引用...我已经尝试过 abcdev.xyz .com:636/dc=xyz,dc=com -- 错误服务器无法连接
客户端提供的 url -- ldaps://abcdev.xyz.com:636 客户端已验证我们的 IP 已列入白名单 所以不确定我应该为这个客户端尝试什么不同。