Аутентификация Windows, настраиваемые разрешения, WCF, Active Directory

У меня есть проект клиент/сервер, взаимодействующий с WCF (на данный момент именованные каналы, но это может измениться, но я не могу использовать IIS). Этот проект интегрирован с Active Directory.

Эта программа предназначена для предоставления пользователям разрешений, которые обычно не имеют разрешений, выступая в качестве своего рода прокси. Пользователь использует клиент, чтобы «запросить» выполнение задачи. Затем сервер выполняет задачу для клиента, если выполняются определенные критерии.

Одним из этих критериев является то, что пользователю разрешено запрашивать эту задачу. Мне нужен способ, чтобы моя служба WCF гарантировала личность пользователя, сравнила ее с базой данных и либо выполнила задачу, либо отклонила задачу.

Как бы я использовал аутентификацию Windows, чтобы гарантировать 100%, что пользователь является тем, кем он себя называет?

Заранее спасибо,

Майк


person Mike Christiansen    schedule 23.07.2009    source источник


Ответы (2)


единственный разрешенный тип аутентификации для именованных каналов — это аутентификация Windows (прокрутите вплоть до netNamedPipeBinding). Например, вы можете выполнить имперсонацию декларативно...

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string GetData(int value)
{
  return string.Format("Hi, {0}, you have entered: {1}",
                           WindowsIdentity.GetCurrent().Name, value);
}

Когда у вас есть удостоверение, вы знаете, что Windows правильно аутентифицировала этого пользователя, и вы можете сравнить это удостоверение с тем, что у вас есть в вашей БД.

person JP Alioto    schedule 23.07.2009
comment
Требуется ли код олицетворения? На самом деле мне нужно выполнить задачу как совершенно другой пользователь, чем запрошенный. Просто нужно проверить их учетные данные в моей базе данных, прежде чем продолжить. Будет ли это делать это? - person Mike Christiansen; 23.07.2009
comment
Вам нужно только олицетворение, чтобы получить личность вызывающего абонента. Если вы получите текущее удостоверение Windows без олицетворения, вы получите удостоверение учетной записи, под которой запущена служба. Вам нужно только проверить, получить имя и вернуть имя из вашего метода. Вам не нужно выполнять работу в методе, который олицетворяет вызывающего (на самом деле, это то, что вы не хотите делать). - person JP Alioto; 23.07.2009

Вы можете создать собственный ServiceAuthorizationManager и реализовать проверку против вашей базы данных пользователя в CheckAccessCore.

См. Как создать собственный диспетчер авторизации для службы.

person Remus Rusanu    schedule 23.07.2009