ASP.NET -> WCF служба требует проверки подлинности Windows
Мне было поручено создать базовое приложение администратора. Приложению необходим внешний интерфейс ASP.NET, который взаимодействует с несколькими внутренними службами, использующими WCF.
Одно требование состоит в том, что пользователи приложения проходят проверку подлинности с использованием проверки подлинности Windows. Я могу сделать это без проблем, если логика приложения содержалась в приложении ASP.NET, но я понятия не имею, как выполнить аутентификацию внутри серверных служб WCF?
- Можно ли передать учетные данные службе WCF и выполнить ее проверку подлинности?
2 ответа
Это зависит... (Обратите внимание, что большая часть этого основана на HTTP/IIS как транспорт, может отличаться при использовании TCP или других привязок)
Сам WCF может быть настроен на использование безопасности транспорта или сообщений с использованием текущих текущих учетных данных.
Если служба WCF (и все, с чем ей нужно общаться с использованием текущих учетных данных) находится в том же окне, что и интерфейс ASP>NET, вы, вероятно, будете в порядке.
... в противном случае вы можете столкнуться с проблемой " Двойной аутентификации". По сути, Windows Auth получит идентификацию "олицетворения" на веб-сервере, что хорошо локально, но у него нет разрешения на аутентификацию с веб-сервера. Для этого вам нужно удостоверение личности делегирования.
Для получения удостоверения делегирования мне известны следующие варианты: Kerberos и Basic Authentication.
Поэтому, если вы говорите "проверка подлинности Windows", вы на самом деле подразумеваете, что все (клиент и все серверы) находятся в одном домене AD, и вы можете согласиться.
У меня есть сайт ASP.NET, использующий проверку подлинности Windows, который должен был вызывать службу WCF с включенной анонимной проверкой подлинности и проверкой подлинности Windows. У меня была проблема с передачей учетных данных Windows службе WCF.
Для этого я сделал следующее
В файле Web.config сайта я убедился, что в моих привязках WCF использовалась проверка подлинности Windows: security mode = "TransportCredentialOnly"
transport clientCredentialType = "Windows"
В IIS я создал пул приложений, используя.Net 4 и классический управляемый конвейерный режим.
В настройках аутентификации моего сайта
Анонимная аутентификация - отключена
Олицетворение ASP.NET - включено
Проверка подлинности Windows - включена
Вот что сработало для меня.