PrincipalPermissionAttribute требует одинаковую роль от нескольких доменов - PullRequest
0 голосов
/ 29 июня 2018

Настройка

Мой веб-сервис WCF работает на IIS 8.0 в Windows Server 2012 в среде с несколькими доменами:

  • SERVER
  • КЛИЕНТ-OLD
  • КЛИЕНТ-NEW

пул приложений запускается с использованием учетной записи службы в домене SERVER (скажем, SEVER\WsSvc01).

Мой веб-сервис WCF использует PrincipalPermissionAttribute, например:

[PrincipalPermission(SecurityAction.Demand, Role = "grp_WsUsers")]
public string Echo(string message)
{
    return string.Format("{0:o}: {1}", DateTime.Now, message);
}

существует группа активных каталогов grp_WsUsers в обоих клиентских доменах:

  • КЛИЕНТ-OLD \ grp_WsUsers
  • КЛИЕНТ-NEW \ grp_WsUsers

Задача

Пользователи из домена CLIENT-OLD, являющиеся членами CLIENT-OLD\grp_WsUsers , могут получить доступ к сервисным пользователям из CLIENT-NEW домена , не могут

Обход

Если я включаю обе группы явно, все пользователи могут получить доступ к услуге

[PrincipalPermission(SecurityAction.Demand, Role = "CLIENT-OLD\\grp_WsUsers")]
[PrincipalPermission(SecurityAction.Demand, Role = "CLIENT-NEW\\grp_WsUsers")]
public string Echo(string message)
{
    return string.Format("{0:o}: {1}", DateTime.Now, message);
}

Вопрос

Что здесь происходит? Если мне нужно явно указать группы, почему это вообще работает? Как я могу устранить различия между двумя группами?

1 Ответ

0 голосов
/ 02 июля 2018

Итак, я наконец понял:

проверка прав доступа, вызванная PricipalPermissionAttribute, просто ищет группу first с именем в любом домене, с которым она встречается , и останавливается после этого , даже если текущий пользователь этого не делает есть группа.

Таким образом, в моем случае реализация сначала искала группу в домене CLIENT-OLD, и, поскольку существует группа с соответствующим именем, она проверяет всех пользователей на эту конкретную группу (я полагаю, SID групп).

...