Правильный способ вызова неуправляемого кода из частично доверенного кода - PullRequest
3 голосов
/ 27 апреля 2009

Как правильно вызывать неуправляемый код, такой как COM API, через взаимодействие .Net из кода, который выполняется в частично доверенной среде?

При разработке ASP.Net WebPart для Microsoft SharePoint мне приходилось взаимодействовать с другой системой через ее COM API. Я временно решил эту проблему, изменив разрешения SharePoint на полную. Позже я усовершенствовал это, внедрив настраиваемую безопасность поверх минимальных настроек, которая дает разрешение SharePoint UnmanagedCode, но это не так уж и много улучшений, поскольку неуправляемый код может пропустить остальную часть CAS.

Из того, что я собрал, мне, вероятно, нужна полностью доверенная сборка, которая позволяет частично доверенным вызывающим сторонам и действует как слой между управляемым и неуправляемым доменами. Кроме того, я бы предположил, что есть необходимость в некоторых дополнительных настройках, которые позволяют частично доверенному коду вызывать полностью доверенный код без полностью доверенного кода, страдающего от разрешений частично доверенного кода.

Так, как правильно и как это реализовать на практике?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2009

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

Если вы пишете код, который должен взаимодействовать с частично доверенным кодом или работать из частично доверенного контекста, вы должны учитывать следующие факторы:

  • Библиотеки должны быть подписаны строгим именем, чтобы их могли использовать несколько приложений. Строгие имена позволяют размещать ваш код в глобальном кэше сборок и позволяют потребителям проверять, что конкретный фрагмент мобильного кода действительно исходит от вас.
  • По умолчанию совместно используемые библиотеки со строгими именами автоматически выполняют неявный LinkDemand для полного доверия, при этом автору библиотеки не нужно ничего делать.
  • Если вызывающий не имеет полного доверия, но все еще пытается вызвать такую ​​библиотеку, среда выполнения выдает исключение SecurityException, и вызывающему не разрешается ссылаться на библиотеку.
  • Чтобы отключить автоматический LinkDemand и предотвратить возникновение исключения, можно поместить атрибут AllowPartiallyTrustedCallersAttribute в область сборки общей библиотеки. Этот атрибут позволяет вызывать ваши библиотеки из частично доверенного управляемого кода.
  • Частично доверенный код, которому предоставлен доступ к библиотеке с этим атрибутом, все еще подвержен дополнительным ограничениям, определенным политикой локального компьютера.
  • Не существует программного способа для частично доверенного кода вызывать библиотеку, которая не имеет атрибута AllowPartiallyTrustedCallersAttribute. Если приложение не получает полного доверия по умолчанию, администратор должен изменить политику безопасности и предоставить приложению полное доверие, прежде чем оно сможет вызвать такую ​​библиотеку.

Источник: MSDN: использование библиотек из частично доверенного кода

1 голос
/ 27 апреля 2009

Код, который вызывает, должен иметь разрешение UnmanagedCode. Эта часть неизбежна. Вопрос в том, как вы собираетесь получить код, имеющий разрешение UnmanagedCode? К сожалению, я недостаточно знаю о WebPart / SharePoint и их ограничениях, чтобы помочь вам здесь.

...