Понимание проверки подлинности Windows WCF - PullRequest
7 голосов
/ 06 марта 2012

У меня есть сервис с аутентификацией 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 приложения будутполучать доступ к сервису, сохраняя аутентификацию службы как Windows?

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

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

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

Дополнительные сведения:

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

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

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

Ответы [ 2 ]

10 голосов
/ 06 марта 2012

Доступ к услуге могут получить только пользователи, имеющие доступ (для входа в систему) к «SERV1»?

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

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

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

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

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

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...