У нас есть клиентское и сервисное приложение WCF (Windows Communication Foundation). Мы используем аутентификацию Windows с Kerberos.
Проблема в том, что служба может работать под одной из многих учетных записей (может быть, сетевой службой, может быть, конкретной учетной записью пользователя - зависит от ИТ-группы). Эта учетная запись вряд ли будет меняться ежедневно, но, возможно, время от времени (может быть, каждые несколько месяцев). Кроме того, мы доставляем этот пакет клиента/службы нескольким группам, и каждая группа может иметь свою собственную учетную запись, которую они используют для запуска службы (это просто для того, чтобы вы знали, что мы не можем сделать индивидуальное решение для одной команды). ).
Теперь причина, по которой приведенный выше абзац является проблемой, очевидно, заключается в том, что если служба не работает в учетной записи SYSTEM или NETWORK SERVICE, то есть в учетной записи пользователя, тогда клиент должен указать имя учетной записи пользователя в идентификаторе своей конечной точки.
Подробнее об этом ограничении см.: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/feb6bc31-9a4b-4f8d-a887-ef6d2c7abe41 и http://www.vistax64.com/indigo/146204-using-localhost-vs-environment-machinename.html
Теперь это, по-видимому, усложняет ситуацию, когда ИТ-отдел меняет учетную запись, на которой работает служба. Каков шаблон для обработки этого, если он есть? Как другие люди справились с этим? Одно из решений, о котором я подумал, заключается в том, что администратор отправляет электронное письмо, когда учетная запись пользователя службы изменилась, в которой есть веб-ссылка на приложение, которое обновляет клиент или файл конфигурации, поэтому клиент ссылается на новую учетную запись пользователя. . Но это кажется хакерским.
По общему признанию, это очень похоже на URI перемещения конечной точки. Кроме того, я думаю, что от имени людей гораздо больше ожиданий, что изменение URI — это то, о чем клиент должен знать, но изменение учетной записи, в которой работает служба, — это то, что должно быть относительно прозрачным для клиента.
Кстати, это необходимо для размещения на IIS 7.0, если это имеет значение.