У меня есть служба, настроенная для получения безопасного токена из ADFS и использования этого токена для связи с другими службами. Когда я связываюсь со своей оконечной точкой ADFS, работающей на Windows, с моего локального компьютера, на котором работает служба ADFS, я могу успешно получить токен. Однако, когда я устанавливаю свою службу на той же машине, на которой работает ADFS, я получаю следующую ошибку:
Secure channel cannot be opened because security negotiation with the remote endpoint has failed. This may be due to absent or incorrectly specified EndpointIdentity in the EndpointAddress used to create the channel. Please verify the EndpointIdentity specified or implied by the EndpointAddress correctly identifies the remote endpoint.
Я могу воспроизвести ошибку с помощью следующего кода, который просто получает токен. Опять же, этот код работает, когда я нахожусь на моей машине разработчика, попадающей на удаленный сервер, но не работает, когда на сервере напрямую. Я использую одни и те же учетные данные пользователя на обоих. Я получаю ту же ошибку в веб-службе IIS с использованием учетных данных пула приложений и с помощью простого тестового клиента с использованием приведенного ниже кода.
private static SecurityToken GetToken()
{
string stsEndpoint = "https://adfsserver.com/adfs/services/trust/13/windowsmixed";
string appliesTo = "http://domain.com/application/myapplication";
var factory = new WSTrustChannelFactory(
new WindowsWSTrustBinding(SecurityMode.TransportWithMessageCredential),
stsEndpoint);
factory.TrustVersion = TrustVersion.WSTrust13;
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
AppliesTo = new EndpointAddress(appliesTo),
KeyType = KeyTypes.Symmetric
};
var channel = factory.CreateChannel();
return channel.Issue(rst);
}
Я включил трассировку в журнале событий Windows для отладки ADFS 2.0. При попадании в эту оконечную точку windowsmixed непосредственно на сервер, я не получаю никаких записей, которые заставляют меня поверить, что она на самом деле не достигает конечной точки.
Я получаю довольно много сбоев аудита в журнале безопасности, связанных с сервисами, которые я запускаю:
Дескриптор объекта был запрошен.
Subject:
Security ID: DOMAIN\ODI$ODIController
Account Name: ODI$ODIController
Account Domain: DOMAIN
Logon ID: 0x1a574b5
Object:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: WinHttpAutoProxySvc
Handle ID: 0x0
Process Information:
Process ID: 0x1f8
Process Name: C:\Windows\System32\services.exe
Access Request Information:
Transaction ID: {00000000-0000-0000-0000-000000000000}
Accesses: Query status of service
Start the service
Query information from service
Access Reasons: -
Access Mask: 0x94
Privileges Used for Access Check: -
Я могу получить доступ к конечной точке, смешанной с именем пользователя, с помощью сохраненных учетных данных и получить соответствующий токен, так что, похоже, что-то происходит с аутентификацией пользователя, чтобы он мог даже связаться с конечной точкой ADFS.
Если я установлю определенные учетные данные в приведенном выше коде, он сможет подключиться. Что снова заставляет меня поверить, что он не передает правильные учетные данные для моего пользователя Windows, когда на той же машине.
factory.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential("UserID", "password1", "dev.domain");
Спасибо за любую помощь, которую вы можете оказать.
Brian