UserPrincipal.Current返回IIS上的apppool

时间:2012-01-25 14:37:04

标签: asp.net-mvc-3 iis active-directory

我需要查找当前用户是谁并在活动目录设置(Windows Server 2008)中检查他们的组,以查看他们是否有权访问我正在构建的mvc3站点上的某些页面(admin)。但是,每当我创建PrincipalContext并查询当前用户时,它都会返回运行该站点的apppool。

我试过了:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal currentuser = UserPrincipal.Current;
string username = currentuser.DisplayName;

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "domain", "CN=dbcn LDAP,OU=the - account,DC=thedc,DC=local", "domain\\user", "password");
UserPrincipal currentuser = UserPrincipal.Current;
string username = currentuser.DisplayName;

Web.config看起来像:

<configuration>
<appSettings>
<add key="webpages:Version" value="1.0.0.0" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="autoFormsAuthentication" value="false" />
<add key="enableSimpleMembership" value="false"/>
</appSettings>
<authentication mode="Windows" />
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<clear />
<add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="service" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<identity impersonate="false" />
<connectionStrings>
<add name="foocontext" connectionString="data source=foo;Initial Catalog=foo;Integrated Security=SSPI;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
<add name="ADService" connectionString="LDAP://foo.local/OU=the - service,DC=foo,DC=local" />
</connectionStrings>
</configuration>

我尝试使用两个不同的帐户(并且未指定帐户)实例化上下文,其中一个是IT管理员用于查询的ldap帐户。我在这里错过了什么?为什么它总是以当前用户的身份返回apppool?如何获取当前登录用户。

谢谢!

2 个答案:

答案 0 :(得分:2)

HttpContext.User就是你想要的......

在ASP.NET中,使用Windows身份验证进行身份验证的用户的安全上下文由WindowsPrincipal和WindowsIdentity类表示。使用Windows身份验证的ASP.NET应用程序可以通过HttpContext.User属性访问WindowsPrincipal类。

要检索启动当前请求的Windows身份验证用户的安全上下文,请使用以下代码:

使用System.Security.Principal; ... //获取经过身份验证的用户的身份 WindowsPrincipal winPrincipal =(WindowsPrincipal)HttpContext.Current.User;

Asp.Net Windows Auth

答案 1 :(得分:0)

经过一番搜索,这对我有用

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);