gpt4 book ai didi

c# - 使用 `new PrincipalContext(ContextType.Domain, "domain.name.com")` 而无需提供用户名和密码

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:16 24 4
gpt4 key购买 nike

我构建了一个将使用 ClickOnce 部署的应用程序,在启动时,需要检查当前登录用户的身份/名称,并将其与我们域中的 Active Directory 组进行比较,以便设置适当的应用程序中的权限。

我可以通过将用户名和密码“硬编码”到应用程序中,并将这些凭据传递到 PrincipalContext 构造函数中来做到这一点,即,

var pc = new PrincipalContext(ContextType.Domain, "domain.name.com", username, password);

问题是我不想在应用程序中存储用户名和密码(我也不想提示用户输入他们的用户名和密码)。

我在网上看到很多使用构造函数而不指定凭据的示例,但这在我们的域中不起作用。

我可以配置域或“域用户”组属性中的设置/权限以使其正常工作吗?

我目前的代码如下(注意:

/// <summary>
/// Gets a list of all Active Directory Groups the specified username is a member of.
/// </summary>
/// <param name="userName">The username of the user in DOMAIN\Username format</param>
/// <param name="domain">The name of the domain server, e.g., server.domain.com (not DOMAIN or DOMAIN.COM or SERVER)</param>
/// <returns></returns>
public static List<string> GetUserGroups(string userName, string domain)
{
if (userName.IsNullOrWhiteSpace()) return null;

var pc = new PrincipalContext(ContextType.Domain, domain);
var userPc = UserPrincipal.FindByIdentity(pc, userName);

if (userPc == null) return null;

var src = userPc.GetGroups(pc);
var result = new List<string>();
src.ToList().ForEach(sr => result.Add(sr.SamAccountName));
return result;
}

我基本上是这样调用的:

var userGroups = GetUserGroups(WindowsIdentity.GetCurrent.Name, "server.domain.com");

最佳答案

“您已经在网上看到很多使用构造函数而无需指定凭据的示例”只要您的计算机属于域并且用户已登录,这应该可以在您的计算机上运行。

对我来说,错误可能来自以下事实:

var pc = new PrincipalContext(ContextType.Domain, domain);

domain 应该是域名,如果用户登录到域,则由环境变量 USERDNSDOMAIN 给出,而不是 “的名称域服务器,例如 server.domain.com",如您在评论中所写。

关于c# - 使用 `new PrincipalContext(ContextType.Domain, "domain.name.com")` 而无需提供用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465764/

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