gpt4 book ai didi

asp.net-mvc-3 - session 开始后的 ACS

转载 作者:行者123 更新时间:2023-12-04 05:18:31 30 4
gpt4 key购买 nike

我正在尝试创建一个 ASP.NET MVC 站点,该站点具有受 Windows Azure ACS 保护的特定区域。我希望默认区域不 protected (即允许匿名用户),但仅保护子区域。

我通过从 Web.config 中的 system.web 部分删除授权元素来实现这一点。

<authorization>
<deny users="?" />
</authorization>

然后为所需的 MVC3 区域添加 protected 位置。

<location path="MyArea">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

但是,我用于访问 IClaimsIdentity 并从中提取属性进行处理的旧代码位于 Global.asax 的 Session_Start 事件中。现在,该站点不需要身份验证即可访问默认区域,因此无需进行身份验证即可发生 Session_Start。

我可以连接什么事件来处理 WIF 的身份验证事件?

我已经使用 SessionAuthenticationModule_SessionSecurityTokenReceived 实现了滑动 session 超时,并尝试在 OnPostAuthenticationRequest 事件上添加用户分析逻辑,但无济于事。

在首次连接到以下事件后,我能够获取用户:

FederatedAuthentication.ServiceConfigurationCreated

然后在这个事件中我连接到这个事件:

FederatedAuthentication.WSFederationAuthenticationModule.SignedIn

但是,在此事件中, session 为空,并且永远不会再次调用 session_start。因此,在重定向到身份提供商时, session 似乎被破坏了。

匿名 -> Application_start
匿名 -> Session_start
匿名 -> 导航至/MyArea
匿名 -> 重定向到 ACS -> 重定向到 idP
匿名 -> 登录
auth -> 重定向到/MyArea
发生 auth -> FederatedAuthentication.WSFederationAuthenticationModule.SignedIn,但 session 为空!

更新:我仍然没有找到 session 和身份验证同时存在的地方。我正在使用 Unity 来按需检测用户。如果有一个事件在发生时执行此操作,但我的工作仍然有效,我会很高兴。

最佳答案

根据您想要执行逻辑的时间和方式(登录后、创建 session token 时、接收 session token 后),您有几个选项。 SessionAuthenticationModule_SessionSecurityTokenReceived 事件应该可以正常工作,但订阅它可能会很棘手。您可以这样做:

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...

FederatedAuthentication.FederationConfigurationCreated += (s, e) =>
{
FederatedAuthentication.SessionAuthenticationModule.SessionSecurityTokenCreated += SessionAuthenticationModule_SessionSecurityTokenCreated;
FederatedAuthentication.SessionAuthenticationModule.SessionSecurityTokenReceived += SessionAuthenticationModule_SessionSecurityTokenReceived;
FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated += WSFederationAuthenticationModule_SessionSecurityTokenCreated;
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenValidated += WSFederationAuthenticationModule_SecurityTokenValidated;
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived += WSFederationAuthenticationModule_SecurityTokenReceived;
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += WSFederationAuthenticationModule_SignedIn;
};
}

void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
Debugger.Break();
}

void SessionAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
Debugger.Break();
}

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
Debugger.Break();
}

void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e)
{
Debugger.Break();
}

void WSFederationAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)
{
Debugger.Break();
}

void WSFederationAuthenticationModule_SignedIn(object sender, EventArgs e)
{
Debugger.Break();
}
}

所有这些代码都位于 Global.asax 文件中,并且您希望在 FederationConfigurationCreated 事件引发后设置事件(此时 SessionAuthenticationModule 和 WSFederationAuthenticationModule 可用)。我在每个事件处理程序中添加了 Debugger.Break。将它们留在那里并调试您的应用程序以查看每个事件何时被触发。这将允许您决定何时何地添加逻辑。

关于asp.net-mvc-3 - session 开始后的 ACS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13939887/

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