Разграничение доступа из кода в WCF - Клиентское CAS
ОГЛАВЛЕНИЕ
Клиентское CAS
В .NET Framework 3.5, WCF допускает исполнение на условиях частичного доверия лишь для ограниченного набора случаев. WCF допускает только вызов на условиях частичного доверия лишь таких привязок HTTP, как BasicHttpBinding, WSHttpBinding и WebHttpBinding (исключая WSDualHttpBinding) и либо вообще безо всякой безопасности, либо только с безопасностью передачи данных. Более того, в случае WSHttpBinding не допускаются такие аспекты, как безопасность сообщений, надежный обмен сообщениями и транзакции. Все привязки со включенным частичным доверием должны использовать текстовое кодирование. Клиент не может использовать такие дополнительные возможности WCF как диагностику. Для включения использования в частично доверенной среде сборка System.ServiceModel допускает источники вызова с частичным доверием, в том числе аттрибут AllowPartiallyTrustedCallers в определение сборки:
[assembly: AllowPartiallyTrustedCallers]
В первом выпуске WCF пропуск этого атрибута исключал любое использование частичного доверия. В .NET Framework 3.5 принудительное применение ограниченного набора поддерживаемых функций является обязанностью привязок. Каждая привязка, кроме привязок HTTP, активно требует полного доверия ее источников вызова, будь это прокси клиента или место размещения службы. Это позволяет самим привязкам HTTP не требовать полного доверия, а вместо этого требовать полномочий в соответствии с контекстом использования. На стороне клиента эти привязки требует полномочий на выполнение (полномочий безопасности с флагом исполнения) и полномочий на подключение к службе (веб-полномочий с флагом подключения к целевому URI-адресу).
Помимо этих требований, на клиенте существуют определенные ограничения настройки. Например, файл настройки не может содержать никаких ссылок на какие-либо хранилища сертификатов (для учетных данных клиентского сертификата), поскольку прикосновение к сертификату заставит WCF потребовать полного доверия.
В идеале стоило бы задействовать все возможности WCF, начиная от распределенных транзакций до надежных вызовов к различным типам учетных данных безопасности и связи приложений в интрасети (или даже на одном компьютере) через TCP, а также каналов межпроцессного взаимодействия (IPC), таких как именованные каналы, причем проделать это, не жертвуя CAS, – то есть не прибегая к полному доверию.