Ошибка с UserPrincipal. GetAuthorizationGroups () метод

У меня есть проблема с помощью метода GetAuthorizationGroups класса UserPrincipal в веб-приложении.

С помощью следующего кода я получаю "При попытке получить группы полномочий, ошибка (5) произошла"

PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM", "username", "password");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();

Я верю этому коду работы до степени.

  • Когда я просматриваю объект контекста, я вижу, что сервер и имя пользователя/пароль были разрешены правильно в объекте
  • Когда я просматриваю объект p, я вижу, что AD детали были заполнены как номер телефона и т.д.

Вот отслеживание стека от ошибки.

[PrincipalOperationException: While trying to retrieve the authorization groups, an error (5) occurred.]
   System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase) +317279
   System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) +441
   System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper() +78
   System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() +11

Путем удаления имени пользователя и пароля детализирует от конструктора PrincipalContext и изменения applicationpool (в iis7) для выполнения как тот же пользователь (username@mycompany.com) - следующие работы кода.

PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();

Я должен заставить код в первом примере работать - я не хочу, выполняет пул приложений как пользователя домена только для получения этой работы кода.

9
задан Adam Jenkin 4 August 2010 в 01:53
поделиться

1 ответ

Ошибка 5 указывает на ERROR_ACCESS_DENIED , что указывает на проблему, связанную с разрешениями. Тем не менее, следующий код только что работал у меня, работая в Windows 7 с веб-сайтом, работающим в качестве пула приложений по умолчанию:

Содержимое «тела» страницы .aspx:

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

Код программной части:

protected void Page_Load(object sender, EventArgs e)
{
    var Context = new PrincipalContext(ContextType.Domain, "logon_domain", "username", "password");
    var principal = UserPrincipal.FindByIdentity(Context, "user_to_query");
    var groups = principal.GetAuthorizationGroups();

    GridView1.DataSource = groups;
    GridView1.DataBind();
}

В мой пример logon_domain был левой частью domain_name \ username , а не стилем спецификации домена, который вы использовали. Мое решение может сработать для вас, а может и не сработать. Если это не так, значит, где-то есть проблема с разрешениями.

2
ответ дан 3 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: