我有一台运行ASP.NET MVC的小型Web服务器。服务器正在使用用户“ abc”运行,但用户“ abc”在ActiveDirectory中没有“更改”的权限。
所以我必须使用PrincipalContext传递用户登录名。
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, null, user, password))
{
GroupPrincipal theGroup = GroupPrincipal.FindByIdentity(context, groupId);
theGroup.Members.Add(context, IdentityType.SamAccountName, userId);
theGroup.Save();
}
该代码确实有效。但是我不喜欢将密码从Methode转移到Methode ... =>在MVC上,我有一个SSO,并且服务器认识我
System.Web.HttpContext.Current.User.Identity
可以使用此信息吗?
new PrincipalContext(ContextType.Domain, null, [System.Web.HttpContext.Current.User]) ???
或者我必须输入密码。以及如何最好地从视图传递到此方法。
谢谢
答案 0 :(得分:1)
这称为“假冒”。只要您使用Windows身份验证,就可以使用WindowsIdentity.Impersonate()
方法:
using (var ctx = ((WindowsIdentity) HttpContext.Current.User.Identity).Impersonate()) {
// Anything done here will use the user's credentials
using (var context = new PrincipalContext(ContextType.Domain)) {
...
}
}