我正在使用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,我还缺少其他东西吗?
答案 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>