Веб-сервис не может открыть именованный канал - доступ запрещен - PullRequest
1 голос
/ 04 декабря 2008

У меня есть служба C ++, которая предоставляет именованный канал клиентам с NULL SECURITY_ATTRIBUTES следующим образом:

hPipe = CreateNamedPipe( lpszPipename, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, NULL);

Существует dll, которая использует этот канал для получения услуг.

Есть c # GUI, который использует dll и отлично работает.

Существует веб-сайт .net, который также использует эту dll (точно такую ​​же на том же ПК), но всегда получает отказ в разрешении, когда пытается открыть канал.

Кто-нибудь знает, почему это может произойти и как это исправить?

Также кто-нибудь знает хороший учебник по SECURITY_ATTRIBUTES, потому что я еще не понял информацию msdn.

Спасибо, Patrick

Ответы [ 3 ]

2 голосов
/ 05 декабря 2008

ACL по умолчанию для именованных каналов (то, что вы получаете с нулевым дескриптором безопасности) предоставляет доступ на запись только LocalSystem, Администраторам и владельцу / создателю канала. Если ваше веб-приложение не запущено под одной из этих учетных записей (по умолчанию это не так), вы не сможете получить доступ для записи. (Я предполагаю, что вы просите о чтении / записи.)

Есть несколько вариантов ...

  1. Запустите веб-приложение под той же учетной записью, что и служба, создавшая канал.

  2. Сконфигурируйте веб-приложение для использования олицетворения, либо указав конкретного пользователя с доступом для записи в web.config, либо настроив его для использования пользователя, переданного IIS (и доступа к приложению из учетной записи пользователя с доступ для записи).

  3. Вручную выдавать себя за пользователя с правами записи на время доступа к каналу (например, с помощью WindowsIdentity.Impersonate).

  4. Используйте нестандартный дескриптор безопасности в канале, который предоставляет доступ на запись каждому (или конкретной учетной записи, на которой запущено приложение, хотя это было бы сложнее настроить).

Вот пример создания простого дескриптора безопасности здесь ; Вы должны иметь возможность изменить его в соответствии со своими потребностями.

2 голосов
/ 08 декабря 2008

Добавление строки:

в разделе файла web.config разрешен доступ к каналу. Я бы не советовал другим использовать это, так как я не уверен в последствиях для безопасности, но сейчас это соответствует нашим требованиям.

Спасибо Эрику и Мартину за то, что они указали мне правильное направление.

2 голосов
/ 04 декабря 2008

Проверьте тип используемой аутентификации на веб-сайте ASP.NET и параметры олицетворения в файле web.config для этого сайта. Скорее всего, код ASP.NET выполняется под учетной записью, которой не разрешено создавать именованные каналы на вашем компьютере.

Возможно, вы сможете исправить это, предоставив дополнительные разрешения учетной записи, используемой приложением ASP.NET, или настроив для этого веб-приложения другую учетную запись (с более высокими привилегиями). Сказав это, вы действительно хотите, чтобы удаленные посетители вашего веб-сайта могли создавать именованные каналы? Я не буду читать вам лекции, я полагаю, вы думали об этом.

Самое доступное и подробное описание SECURITY_ATTRIBUTES, которое я когда-либо видел, находится в этой книге Кита Брауна ... http://www.amazon.co.uk/gp/product/0201604426.

...