2009-04-26 80 views
3

通過.Net互操作在部分受信任的環境中執行的代碼調用非託管代碼(如COM API)的正確方法是什麼?從部分受信任的代碼調用非託管代碼的正確方法

在開發用於Microsoft SharePoint的ASP.Net WebPart時,我必須通過COM API與另一個系統進行通信。通過將SharePoint的權限更改爲完整,我暫時解決了此問題。後來,我通過在提供SharePoint UnmanagedCode權限的最小設置之上實現自定義安全性來改進這一點,但這並不是什麼大的改進,因爲非託管代碼可以跳過CAS的其餘部分。

從我所收集的信息中,我可能需要一個完全信任的程序集,它允許部分受信任的調用者並充當託管和非託管域之間的層。另外我會想象需要一些額外的設置,允許部分信任的代碼調用完全信任的代碼,而完全信任的代碼不會受到部分信任的代碼的權限限制。

那麼正確的方法是什麼以及如何在實踐中實現它?

回答

3

是的,您需要一個完全信任的程序集,它允許部分受信任的調用者並充當託管和非託管域之間的層。

如果你寫的代碼必須與部分受信任的代碼交互或從部分受信任的情況下運行,您應考慮以下因素:

  • 圖書館必須具有較強的名稱,以便籤署通過共享多種應用。強大的名稱允許您的代碼放置在全局程序集緩存中,並允許消費者驗證某個特定的移動代碼實際上源於您。
  • 默認情況下,強名稱共享庫自動執行隱式LinkDemand以實現完全信任,而不需要庫編寫器必須執行任何操作。
  • 如果調用方不具有完全信任但仍嘗試調用此類庫,則運行時會引發SecurityException,並且調用方不允許鏈接到庫。
  • 爲了禁用自動LinkDemand並防止拋出異常,可以將AllowPartiallyTrustedCallersAttribute屬性放置在共享庫的程序集範圍中。此屬性允許從部分受信任的託管代碼調用庫。
  • 被授予對此屬性的庫訪問權限的部分受信任的代碼仍受本地計算機策略定義的進一步限制。
  • 對於部分受信任的代碼調用沒有AllowPartiallyTrustedCallersAttribute屬性的庫,沒有編程方式。如果應用程序默認情況下沒有獲得完全信任,則管理員必須選擇修改安全策略並授予應用程序完全信任才能調用此類庫。

來源: MSDN: Using Libraries from Partially Trusted Code

+0

謝謝!我想知道我是如何錯過那一次的。我想我只關注非託管部分,而不是部分信任 - >完全信任的呼叫。 – 2009-04-27 08:37:34

1

調出的代碼需要具有UnmanagedCode權限。這部分是不可避免的。問題是,你將如何獲得具有UnmanagedCode權限的代碼?不幸的是,我不太瞭解WebPart/SharePoint及其限制,以幫助您。

相關問題