我需要一些帮助,说明如何使用运行应用程序的当前用户的Credential。 因此,在Windows 7中,您只需运行应用程序即可使用用户运行应用程序,或者您可以使用“以其他用户身份运行”选项并以其他用户身份运行。
在我的Active Directory中,我有2个帐户域用户和一个域管理员权限。我以域用户身份登录Windows,当我需要“以不同用户身份运行”时,以域管理员身份启动某项任务。
所以任务是获取我的凭据并使用它来执行某些任务,让我们说重命名活动目录用户名。 我能看到的最好的方法是让用户运行应用程序进入Domain Admin凭证,然后启动应用程序并将其用于各种任务。当然,我可以使用“以不同用户身份运行”轻松运行应用程序,但我仍然需要获取此凭据并使用它们。
我在网上搜索过,我找不到这个,我只能找到使用凭据进行网络身份验证。
如果你能告诉我一些如何:
的例子1)向用户询问管理员用户凭证(我可以不用此处离开)
2)获取并使用运行应用程序的用户的凭据
我不想知道密码,我知道我不能。真的不想添加到WPF表单密码框我更喜欢使用Windows API来处理这个我已经使用“以其他用户身份运行”输入的用户名和密码。
PS:对不起,如果这个话题存在:(我想我不善于创建正确的搜索请求。
添加:更清楚我需要什么。在powershell中,它将如下所示:
# This Asks user to enter credentials
$cred = Get-Credential;
# this checks if I have rights to use them.
Get-ADDomain “DOMAIN” –Server “Domain.com” –Credential $cred;
当然,它简化为地狱,但重点是我可以在需要时使用用户输入的凭据。
答案 0 :(得分:2)
Get-ADDomain
的等效C#非常简单,只是
public void PerformSomeActionAsAdmin(string adminUsername, string adminPassword)
{
//Null causes the constructor to connect to the current domain the machine is on.
// |
// V
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, adminUsername, adminPassword))
{
//do something here with ctx, the operations will be performed as whoever's username and password you passed in.
}
}
如果您不想连接到当前域,而是想要连接到Domain.com
,请将null
替换为相应的字符串。
编辑:如果您想使用安全字符串而无法使用System.DirectoryServices.AccountManagement.PrincipalContext
,则需要使用System.DirectoryServices.Protocols
中的较低级别电话。执行此过程非常复杂,这里有一个指向MSDN文章的链接" Introduction to System.DirectoryServices.Protocols (S.DS.P)"解释如何使用它。这是一个很复杂的阅读,老实说,我认为能够使用加密字符串是值得的。
public void PerformSomeActionAsAdmin(NetworkCredential adminCredential)
{
using(LdapConnection connection = new LdapConnection("fabrikam.com", adminCredential))
{
// MAGIC
}
}
答案 1 :(得分:0)
您想检查当前用户是否是管理员?从查看他的代码开始,它应该可以帮助您开始识别当前用户所在的AD组。这将为您提供一个字符串列表,这些字符串是当前用户所属的每个组的名称。然后,您可以针对您要检查的任何AD组检查该列表。将YourDomain替换为您的域名:
WindowsIdentity wi = WindowIdentity.GetCurrent();
List<string> result = new List<string>();
foreach (IdentityReference group in wi.Groups)
{
result.Add(group.Translate(typeof(NTAccount)).ToString().Replace("YourDomain\\", String.Empty));
}
由于我不太确定你要做什么,这也可能会有所帮助。您必须从textobx,密码框等处获取用户名和密码。这可以用于&#34;覆盖&#34;例如,使用经理的凭证等来执行当前用户因AD群组成员资格等而无法做的事情。
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YourDomain"))
{
if (UserName.Contains("YourDomain\\"))
{
UserName = UserName.Replace("YourDomain\\", String.Empty);
}
//validate the credentials
bool IsValid = pc.ValidateCredentials(UserName, Password);
}