Как требовать олицетворения для службы WCF и устанавливать учетные данные из службы? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть служба WCF, в которой я пытаюсь настроить набор учетных данных, чтобы они использовались не только для службы, но и для всех последующих операций на NAS.

В настоящее время яустановили атрибут [OperationBehavior(Impersonation = ImpersonationOption.Required)] в методе и установили <identity impersonate="true" userName="DOMAINUSER" password="PASSWORD"/> в сервисе web.config.Поскольку это внутренняя служба, и я не хочу требовать от пользователя специальных учетных данных, я бы хотел использовать <basicHttpBinding> с <security mode="None">.Проблема заключается в том, что при установке этого способа я получаю сообщение об ошибке:

The contract operation requires Windows identity for automatic impersonation. 
A Windows identity that represents the caller is not provided by
binding 'BasicHttpBinding' for contract.

При установке, как указано выше, WindowsIdentity.GetCurrent().Name возвращается NT AUTHORITY \ NETWORK SERVICE несмотря на то, что в web.config установлена ​​директива олицетворения.Кажется, он хочет, чтобы учетные данные передавались от потребителя / клиента, а не устанавливались изнутри службы.

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Установка этого атрибута в методе обслуживания:

[OperationBehavior (Impersonation = ImpersonationOption.Required)] * ​​1003 *

означает, что код службы будет олицетворять личность клиента.Поэтому, если вы не хотите использовать учетные данные вызывающего клиента (что, по-видимому, имеет место), вы должны оставить этот атрибут вне метода обслуживания.

То, что вы хотите, это то, что вы хотитеВаш сервис должен работать как определенный идентификатор независимо от идентификатора клиента.

Если параметр <identity impersonate="true" userName="DOMAINUSER" password="PASSWORD"/> 'не работает, вы можете изменить идентификатор пула приложений, в котором ваше приложение выполняется в IIS.Это приведет к тому, что ваше приложение будет всегда работать под этим удостоверением, если не заданы никакие служебные методы, явно требующие олицетворения.

1 голос
/ 10 февраля 2012

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

Для доступа к удаленному хранилищу вы хотите использовать разные учетные записи (возможно, основанные на некоторой логике). Прежде всего, это не очень безопасный способ, поскольку он требует хранения учетных записей и паролей, используемых для доступа к этим ресурсам, в каком-либо файле конфигурации или реестре (или, что еще хуже, в жестком коде). Вы должны запустить свой сервис со специальной учетной записью, созданной только для вашего приложения, и эта учетная запись должна иметь необходимые разрешения для каждого ресурса, который вам нужен.

В любом случае вам необходимо войти в систему под вашей конкретной учетной записью и выдать себя за нее . Как я знаю. NET не имеет API для входа в систему - вы должны использовать взаимодействие и вызывать метод Win API LogonUser.

...