2013-03-05 245 views
0

我正在尝试使用SessionAuthenticationModule创建令牌并将其写入Cookie而不是使用旧的FormAuthentication.SetAuthCookie。这样我也可以向我的委托人添加索赔,并在每次请求时提供索赔。.NET 4.5 SessionAuthenticationModule

它可以在我自己的计算机上正常工作,但是当我部署到服务器时,出现此错误: 指定的参数超出了有效值的范围。参数名:keyExpirationTime

来源:System.IdentityModel 堆栈跟踪pointsto重载构造之一 - 它似乎已经从我原来的呼叫走过的TokenHandler,然后通过一对夫妇的构造函数来CreateSessionSecurityToken。

My SessionAuthenticationModule是我自己编写的类,但派生自System.IdentityModel.Services.SessionAuthenticationModule并重写OnPostAuthenticateRequest。

我发送DateTime.Now和DateTime.Now.AddMinutes(20)为validFrom和validTo参数(在一个单独的笔记,这可以是一个配置设置,如果是这样? - 显然我可以设置一个AppSetting的分钟,但大概是有一个安全配置设置的地方?)

我已经搜索了这个错误信息,但无法找到任何提及它。

我已经使用FederationAuthentication.SessionAuthenticationModule.CreateSessionSecurityToken也试图HttpContext.Current.ApplicationInstance.Modules(“SessionAuthenticationModule”) - 我开发的机器上都工作,但在服务器上没有工作。

服务器有Windows 2008 R2,我有Windows 7专业版。都有IIS 7.5.7600.16385。两者都使用dotNetFx45_Full_setup.exe v4.5.50709.17929安装.NET 4.5。 对于测试,我只使用默认网站下的虚拟应用程序,该应用程序使用集成管道的64位应用程序池,并且两个应用程序池都在AppPoolIdentity下运行。

CreateSessionSecurityToken从sessionauthennticationmodule添加了声明后执行的页面调用。

这一定是相当简单的事情,但我需要帮助搞清楚它是什么!真的很感谢一些帮助。

感谢 菲尔

回答

3

所有样品说: “使用DateTime.UtcNow”,你可以试试吗?您也可以将null粘贴到ValidTo以指定应通过将SessionSecurityTokenHandler.DefaultTokenLifetime属性的值添加到validFrom参数指定的时间来确定值。

+0

谢谢 - 由于某种原因,我没有收到回复发送到我的电子邮件,所以只看到了这一点。事实证明,我工作了,但你是对的,UtcNow为我工作 – user2047485 2013-03-15 11:03:23

+0

说了这么多,null似乎不适用于ValidTo参数。我是否需要SessionSecurityToken DefaultTokenLifetime的一些配置设置? – user2047485 2013-03-15 11:42:29