C# 模块化应用模式:如何检查哪个是调用模块

C# 模块化应用模式:如何检查哪个是调用模块,c#,security,prism,modularity,C#,Security,Prism,Modularity,我目前正在使用prism 5.0在c#NET 4.5中编写一个模块化桌面应用程序 我的应用程序由“核心”(或主机)和几个模块组成。 我的每个模块都实现了prism提供的IModule接口。 我的应用程序的核心为模块提供了一个“API”,因此它们可以轻松地与应用程序/其他模块交互。例如,“API”允许模块发布或订阅事件或与BDD通信 我的问题是: BDD中有一些敏感信息,我事先不知道哪个模块将运行。我想处理“恶意”模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查模块是否有权删除B

我目前正在使用prism 5.0在c#NET 4.5中编写一个模块化桌面应用程序

我的应用程序由“核心”(或主机)和几个模块组成。 我的每个模块都实现了prism提供的
IModule
接口。 我的应用程序的核心为模块提供了一个“API”,因此它们可以轻松地与应用程序/其他模块交互。例如,“API”允许模块发布或订阅事件或与BDD通信

我的问题是:

BDD中有一些敏感信息,我事先不知道哪个模块将运行。我想处理“恶意”模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查模块是否有权删除BDD中的内容。 我怎么能这么做?我已经拥有BDD中存储的每个模块的权限,但是我怎么知道哪个模块正在以安全的方式调用API呢

一切都应该动态完成,因为我事先不知道哪个模块将运行

现在我想到的是:

  • 对API的调用应该包含一个额外的参数:a
    Type
    。但是模块可以通过执行
    typeof(someType)

  • 对API的调用应该包含一个额外的参数:a
    IModule
    :调用模块将自己(
    this
    )作为参数发送,以便我可以检查API中的类型。但是,调用模块仍然可以通过提供的UnityContainer或其他方式获取另一个模块的实例,从而很容易地伪造它

  • 通过
    StackFrame
    检查调用对象的类型。这个可能更“安全”,但在我看来它真的很重而且很脏

还有别的办法吗?我对c#和模块化模式非常陌生,我肯定我遗漏了一些东西

编辑:我将使用的方法在加载程序集时对模块进行身份验证。如果这个模块是已知的,我会给他一个随机生成的密钥。每次模块想要调用API时,他都必须提供提供的密钥,以便我可以检查他的身份


这是我能想到的最安全的方法。

您可以使用强命名模块。
看见通过这种方式,您可以对每个模块(程序集)进行身份验证和授权。

很好,似乎非常适合我的情况!谢谢!我没想到会有这样的事