2012-03-06 5 views
7

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

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. Есть ли способ, по которому служба сможет узнать учетные данные пользователя?

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

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

  1. ASP.NET Active Directory Membership Provider and SQL Profile Provider

  2. wcf data contracts authorization

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

+2

Вот очень хорошее сообщение, которое иллюстрирует, как вы можете использовать группы AD для ограничения доступа к службе: http://stackoverflow.com/a/5136551/29407 –

+0

@Darin. Благодарю. Надеюсь, что ссылка для моего второго вопроса. Не могли бы вы ответить и на другие вопросы? Также (для вопроса № 2) я не пытаюсь ограничивать доступ на основе роли; но и клиента. – Lijo

ответ

9

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

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

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

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

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

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

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

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

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

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

+0

Спасибо за четкое объяснение. Один вопрос о ServiceSecurityContext.WindowsIdentity. Я могу получить имя и другие данные пользователя. Но смогу ли я узнать пароль пользователя? – Lijo

+2

@ Lijo: ** NO ** - в Windows отсутствует ** NO **, чтобы получить пароль пользователя. –

+0

Спасибо. Это завершает нашу дискуссию. Я отмечаю это как ответ. – Lijo

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

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

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

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

Смежные вопросы