如何在中等信任环境中连接到当前的 FormsAuthenticationModule?

Posted

技术标签:

【中文标题】如何在中等信任环境中连接到当前的 FormsAuthenticationModule?【英文标题】:How can I hook into the current FormsAuthenticationModule in a Medium Trust environment? 【发布时间】:2010-09-30 16:56:32 【问题描述】:

我的应用程序中有一个 HttpModule,它使用以下代码连接到 FormsAuthenticationModule 的 Authenticate 事件:

public void Init(HttpApplication context)

    FormsAuthenticationModule faModule =
        (FormsAuthenticationModule)context.Modules["FormsAuthentication"];
    faModule.Authenticate +=
        new FormsAuthenticationEventHandler(faModule_Authenticate);

很遗憾,对 context.Modules 的调用失败,因为应用需要在中等信任环境中运行。还有其他方法可以让我参与此活动吗?

【问题讨论】:

【参考方案1】:

这很难——您甚至无法从全局应用程序文件中访问 Modules 集合。

您可以尝试从 Global 中的 AuthenticateRequest 处理程序调用您的自定义代码:

protected void Application_AuthenticateRequest(object sender, EventArgs e)

    // Call your module's code here..

您也无法从集合中获取自定义模块,因此您需要对模块库的静态引用。

除了在机器级别的 web.config 中将 AspNetHostingPermission (as detailed for other permissions here) 授予您的站点之外,我没有想法!

【讨论】:

如果通过Reflector查看System.Web中HttpApplication类中的Modules属性,可以看到CAS对High trust level的需求。不幸的是,我知道我的主持人对以下问题的回答:“我们有这些很棒的 VPS/专用服务器!” :( 是的,锁定托管是个问题 - 我猜你的模块是第 3 方? 不,它是我自己的,所以我可以把代码放在别的地方,只是希望能把它分开。

以上是关于如何在中等信任环境中连接到当前的 FormsAuthenticationModule?的主要内容,如果未能解决你的问题,请参考以下文章

Expression<TDelegate>.在中等信任环境中编译

可以在中等信任环境中运行 C++ dll 吗?

如何在java中连接到sybase的优势数据库

如何判断当前应用是不是为Medium Trust

反射会带来啥风险? (中等信任度)

中等信任中 MVC 控制器 + 依赖注入 (Ninject) 的问题