gpt4 book ai didi

.net - 从部分受信任的代码中调用非托管代码的正确方法

转载 作者:行者123 更新时间:2023-12-01 13:08:49 24 4
gpt4 key购买 nike

从在部分受信任的环境中执行的代码通过 .Net 互操作调用非托管代码(例如 COM API)的正确方法是什么?

在为 Microsoft SharePoint 开发 ASP.Net WebPart 时,我必须通过其 COM API 与另一个系统进行通信。我通过将 SharePoint 的权限更改为完全权限暂时解决了这个问题。后来我通过在赋予 SharePoint UnmanagedCode 权限的最小设置之上实现自定义安全性来改进这一点,但这并不是什么大改进,因为非托管代码可以跳过 CAS 的其余部分。

根据我收集到的信息,我可能需要一个完全受信任的程序集,它允许部分受信任的调用方并充当托管域和非托管域之间的层。此外,我认为需要一些额外的设置,允许部分受信任的代码调用完全受信任的代码,而完全受信任的代码不会受到部分受信任代码的权限的影响。

那么正确的做法是什么,在实践中又该如何实现呢?

最佳答案

是的,您需要一个完全受信任的程序集,它允许部分受信任的调用者并充当托管域和非托管域之间的层。

如果您编写的代码必须与部分受信任的代码交互或在部分受信任的上下文中运行,您应该考虑以下因素:

  • 库必须使用强名称进行签名才能由多个应用程序共享。强名称允许您的代码放置在全局程序集缓存中,并允许消费者验证特定的移动代码片段是否确实来自您。
  • 默认情况下,强名称共享库会自动执行隐式 LinkDemand 以获得完全信任,而库编写者无需执行任何操作。
  • 如果调用者没有完全信任但仍尝试调用此类库,则运行时会抛出 SecurityException 并且不允许调用者链接到库。
  • 为了禁用自动 LinkDemand 并防止抛出异常,您可以将 AllowPartiallyTrustedCallersAttribute 特性放在共享库的程序集范围内。此属性允许从部分受信任的托管代码调用您的库。
  • 被授予访问具有此属性的库的部分受信任代码仍然受到本地机器策略定义的进一步限制。
  • 部分受信任的代码无法以编程方式调用不具有 AllowPartiallyTrustedCallersAttribute 属性的库。如果默认情况下应用程序未获得完全信任,管理员必须选择修改安全策略并授予应用程序完全信任,然后它才能调用此类库。

来源: MSDN: Using Libraries from Partially Trusted Code

关于.net - 从部分受信任的代码中调用非托管代码的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com