我有一个 ASP.NET 应用程序,它将身份验证 cookie 发送到 ASP.NET MVC 应用程序,用作后台应用程序。
我添加了一个全局过滤器,用于检查身份验证 cookie 的每个控制器操作。如果cookie存在,则允许用户进入该页面。
代码如下所示:
public class SecurityFilter : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
// TODO: For some reason .AUTHCookie cookie isn't exist in request context of filter,
HttpCookie cookie = filterContext.RequestContext.HttpContext.Request.Cookies[".AUTHCookie "];
if (cookie != null) {
从另一边我可以看到从 ASP.NET 应用程序发送的 cookieApplication_BeginRequest
Global.asax 文件中的事件。
cookie 在哪里以及为何消失? Cookie 在 MVC 请求处理管道的哪一部分被丢弃?
protected void Application_BeginRequest(object sender, EventArgs e)
{
var cookies = HttpContext.Current.Request.Cookies;
// HERE I CAN SEE BOTH cookies. In filter action only one cookie was found. The authentication cookie is thrown somewhere ...
}
我找到了适合我的场景的解决方案。我已经在两个应用程序的机器密钥中添加了兼容性模式=“Framework45”,并且一切正常。
注意:如果您的应用程序之一使用旧版本的 .NET Framework,则必须显式配置 .NET 4.5 应用程序以使用早期的计算机兼容模式,否则它们将无法加密/解密表单身份验证票证。
只是提醒你我的情况:
WebForms ASP.NET 4.5
<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" />
<authentication mode="Forms">
<forms name="_authcookie" domain=".domain.com" loginUrl="Default.aspx?View=1" defaultUrl="Default.aspx?View=1" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" />
</authentication>
MVC 4
<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" />
<authentication mode="Forms">
<forms name="_authcookie" domain=".domain.com" defaultUrl="~/" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" />
</authentication>
兼容模式的可能值:
http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)