SessionAuthenticationModule Cookie Handler没有创建HttpOnly安全cookie

时间:2013-06-03 15:35:07

标签: asp.net-mvc-4 forms-authentication session-cookies wif claims-based-identity

我正在使用System.IdentityModel使用带有声明主体的表单身份验证来验证ASP.NET MVC4 Web应用程序中的用户。 (基于这篇文章的代码:http://brockallen.com/2013/01/26/replacing-forms-authentication-with-wifs-session-authentication-module-sam-to-enable-claims-aware-identity/

我的ClaimsBasedAuthenticationService类从SessionSecurityToken发出SAM cookie,但一切都很好......除了我刚才注意到它没有像HTTPOnly那样创建会话cookie或要求它们需要SSL。当我调试代码时,我可以看到在调试器中正确设置了CookieHandler对象上的那些属性,但是创建的最终会话cookie根本没有标记HTTPOnly和Secure标志。

我有web.config行将这些显式设置为true:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" />
  <authentication mode="Forms">
     <forms ... requireSSL="true" />
  </authentication>
 ...
</system.web>
<system.identityModel.services>
  <federationConfiguration>
    <cookieHandler requireSsl="true" hideFromScript="true" />
  </federationConfiguration>
</system.identityModel.services>

有人可以告诉我,为了让我的FedAuth cookie从脚本(HTTPOnly)中隐藏并需要SSL,我还缺少其他东西吗?

2 个答案:

答案 0 :(得分:0)

我使用相同的实现,但没有使用Fiddler2看到您的问题。但是问题可能与您的调试工具有关?在IE10调试工具中,仅在首次接收cookie时才显示安全和仅http标志。如果您使用Chrome调试工具进行检查,则应该会在所有请求中看到正确显示的标记。

答案 1 :(得分:0)

你有这个工作吗?我一直在使用基本相同的代码,一切都很好。

我看不出以下建议与任何事情有关,但我唯一可以建议的是设置cookie的生命周期

<cookieHandler hideFromScript="true" requireSsl="true" persistentSessionLifetime="30" />

<forms loginUrl="/Whereever" timeout="30" requireSSL="true" />

<system.webServer>
  <modules>
    <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
  </modules>
</system.webServer>