C#ActiveDirectory使用“权利”获取PrincipalContext

时间:2018-11-22 06:32:14

标签: asp.net-mvc model-view-controller active-directory principalcontext usersession

我有一台运行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]) ???

或者我必须输入密码。以及如何最好地从视图传递到此方法。

谢谢

1 个答案:

答案 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)) {
        ...
    }
}