UserPrincipal.Current возвращает пул приложений на IIS - PullRequest
2 голосов
/ 25 января 2012

Мне нужно найти, кто является текущим пользователем, и проверить их группы в настройке активного каталога (windows server 2008), чтобы узнать, есть ли у них разрешение на доступ к определенным страницам (admin) на создаваемом мной сайте mvc3. Однако всякий раз, когда я создаю PrincipalContext и запрашиваю текущего пользователя, он возвращает пул приложений, под которым работает сайт.

Я пробовал:

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>

Я пытался создать экземпляр контекста с двумя разными учетными записями (и без указания учетной записи), одна из которых - учетная запись ldap, которую ИТ-администратор использует для запросов. Что мне здесь не хватает? Почему он всегда возвращает apppool в качестве текущего пользователя? Как я могу получить текущего вошедшего в систему пользователя.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 января 2012

HttpContext.User - это то, что вам нужно ...

В ASP.NET контекст безопасности пользователя, который проходит проверку подлинности с помощью проверки подлинности Windows, представлен классами WindowsPrincipal и WindowsIdentity.Приложения ASP.NET, использующие проверку подлинности Windows, могут обращаться к классу WindowsPrincipal через свойство HttpContext.User.

Чтобы получить контекст безопасности пользователя, прошедшего проверку подлинности Windows, который инициировал текущий запрос, используйте следующий код:

с использованием System.Security.Principal;... // Получить удостоверение подлинности пользователя WindowsPrincipal winPrincipal = (WindowsPrincipal) HttpContext.Current.User;

Asp.Net Windows Auth

0 голосов
/ 23 октября 2017

Это то, что у меня сработало после некоторого поиска

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...