Понимание Аутентификации Windows WCF

У меня есть сервис с аутентификацией Windows. Используя следующий код, я могу получить идентификатор Windows пользователя, который (с помощью клиента) использует сервис.

String currentUser = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;

Конфигурация на сервере:

<binding name="messageSecurity">
<security mode="Message">
<message clientCredentialType="Windows"/>
</security>
</binding>

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

Сейчас я пытаюсь понять его значение в нашей корпоративной сети. В офисе пользователи будут входить в свои рабочие столы, используя свои учетные данные активного каталога. Наш сервис размещен на сервере Windows с именем "SERV1".

  1. Только пользователи, которые имеют доступ (для входа в систему) к "SERV1", могут получить доступ к услуге? Или все пользователи, которые могут войти в офисную сеть (предъявляя права доступа к активному каталогу), смогут использовать эту услугу?

  2. Есть ли способ гарантировать, что только одобренные CIO приложения будут иметь доступ к сервису, сохраняя сервис в качестве окон с аутентификацией?

  3. Эта проверка подлинности происходит для каждого вызова операции службы или только для первого вызова?

  4. Есть ли способ, которым служба сможет узнать учетные данные пользователя Windows?

Примечание. Насколько я понимаю, WindowsAuthentication можно сравнить с поставщиком членства, предоставляющим имя пользователя и пароль из централизованного расположения. Его можно сравнить с поставщиком членства ASP.Net или поставщиком членства Active Directory.

Дальнейшее чтение:

  1. Поставщик членства в ASP.NET Active Directory и поставщик профиля SQL

  2. wcf данные контракты авторизация

  3. http://www.theserverside.net/tt/articles/showarticle.tss?id=ClaimsBasedSecurityModel

2 ответа

Решение

Только пользователи, которые имеют доступ (для входа в систему) к "SERV1", могут получить доступ к услуге?

Да, в этом и заключается смысл использования учетных данных Windows в службе WCF. Только пользователи, имеющие учетную запись домена в этом домене Active Directory (или отдельный домен, имеющий двусторонние отношения полного доверия с вашим доменом), смогут получить доступ к службе.

Или все пользователи, которые могут войти в офисную сеть (предъявляя права доступа к активному каталогу), смогут использовать эту услугу?

Границей безопасности WCF является домен Active Directory, а не конкретный сервер.

Есть ли способ гарантировать, что только одобренные CIO приложения будут иметь доступ к сервису, сохраняя сервис в качестве окон с аутентификацией?

Чем эти приложения, одобренные CIO, отличаются от других? Доступ к WCF осуществляется с помощью учетных записей - обычно учетных записей пользователей. Вы можете ограничить, какие учетные записи имеют доступ к вашей службе (например, требуя, чтобы эти учетные записи были членами определенной группы AD или чего-либо еще). Вы не можете реально "ограничивать" на основе приложений (только если эти приложения используют определенные учетные записи уровня приложения для доступа к вашей службе WCF)

Эта проверка подлинности происходит для каждого вызова операции службы или только для первого вызова?

Зависит от вашего сервиса - если вы используете сервис WCF для каждого вызова, то проверка происходит для каждого вызова. Если вы используете службу WCF для каждого сеанса с включенным "согласованием безопасности", то проверка происходит один раз в начале сеанса, а не до его окончания.

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

Да - OperationContext.Current.ServiceSecurityContext.WindowsIdentity Это учетные данные Windows (идентификатор Windows), используемые для вызова вашей службы. Это намного больше, чем просто имя пользователя.....

  1. Это не задача аутентификации, это задача авторизации. Kerberos отвечает за проверку подлинности пользователя (имя, которое вы получаете для него, является его фактическим именем). LDAP управляет авторизацией. В контексте Windows это означает, что пользователь должен быть членом некоторой группы разрешенных для доступа к серверу вещей (и служба должна проверить, что это так).

  2. Приложения? На самом деле, нет. То есть в Active Directory есть два типа аутентифицированных принципалов: пользователи и компьютеры. Но почему важно, какое приложение запускается, если пользователь, выполняющий запуск, имеет разрешение на подключение к службе? Иными словами, вы не можете помешать кому-то использовать свой собственный код, чтобы делать именно то, что будет делать ваш код.

  3. Не должно иметь значения. Аутентификация работает, нет? На самом деле происходит то, что приложению передается билет, подтверждающий, что пользователь уже прошел аутентификацию (на KDC, на сервере активных каталогов).

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

Другие вопросы по тегам