Передача Windows Token в WCF, затем из WCF на другой сервер в домене AD - PullRequest
0 голосов
/ 04 ноября 2008

Это может быть глупо, но у кого-нибудь есть идеи, как:

Передайте маркер Windows пользователя (аутентифицируемый из домена) вызываемой службе wcf - служба затем выполнит действие на основе учетных данных Windows пользователя, которые сделали вызов.

то есть: Клиент -> WCF -> НЕКОТОРЫЕ ХРАНИЛИЩА 3-Й СТОРОНЫ, КОТОРЫЕ ИНТЕГРИРУЮТ С АКТИВНОЙ КАТАЛОГОМ.

У меня есть уровень данных wcf, который отвечает за возврат всех данных - в настоящее время клиент звонит в эту службу. Этот сервис извлекает документы из хранилища. Заказчик хотел бы добиться этого, управляя всеми учетными записями с помощью AD, поскольку хранилище поддерживает интеграцию с AD.

Любая помощь будет оценена - спасибо: -)

---------- обновление Я следил за статьей Джезелл, но у меня все еще есть проблемы.

Я хочу использовать upn, а не spn (чтобы учетная запись могла быть заблокирована и более безопасной), но я не уверен, что у меня получилось, что неправильно.

Я создал spn на сервере AD (пробовал каждую комбинацию, без дубликатов)

Вот фрагмент кода, возможно, у кого-то есть представление о том, что я делаю неправильно.

Dim binding As New NetTcpBinding()
binding.Security.Mode = SecurityMode.Message
binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows

Dim upn As String = "usertest@testdomain.com"

Dim ep As New EndpointAddress(New Uri("net.tcp://server1.testdomain.com:1111/ServiceTest") _
    , EndpointIdentity.CreateUpnIdentity(upn))

Dim factory As New ChannelFactory(Of Credential.Interface.ICredentialTest)(binding, ep)
factory.Credentials.Windows.AllowNtlm = False
factory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation

Dim iproxy As Credential.Interface.ICredentialTest = factory.CreateChannel()
Dim co As ICommunicationObject = CType(iproxy, ICommunicationObject)
iproxy.ToService(result)

Теперь я получаю сообщение об ошибке: «Проверка подлинности не удалась для исходящего сообщения. Ожидаемая личность ... Все, что я могу найти по этому поводу, относится к использованию сертификатов, чего я не делаю.

Спасибо: -)

1 Ответ

2 голосов
/ 04 ноября 2008

Это называется делегированием. Установите разрешенный уровень олицетворения в конфигурации клиента на «Делегирование» и отключите проверку подлинности NTLM на стороне сервера. У меня есть пост с более углубленным обсуждением здесь:

http://www.iserviceoriented.com/blog/post/Delegation+-+WCF+Gotcha+2.aspx

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