我正在尝试使用SessionAuthenticationModule来创建令牌并将其写入cookies,而不是使用旧的FormAuthentication.SetAuthCookie。这是因为我还可以将声明添加到我的主体中,并在每次请求时都可以使用它们。
它在我自己的计算机上工作得很好,但是当我部署到服务器上时,我得到了这个错误:指定的参数超出了有效值的范围。参数名称: keyExpirationTime
来源: System.IdentityModel堆栈跟踪指向一个重载的构造函数-它似乎从我最初通过TokenHandler调用CreateSessionSecurityToken,然后通过几个构造函数。
我的SessionAuthenticationModule是我自己编写的一个类,但它派生自System.IdentityModel.Services.SessionAuthenticationModule并覆盖了OnPostAuthenticateRequest。
我为validFrom和validTo参数发送了DateTime.Now和DateTime.Now.AddMinutes(20) (另请注意,这可以是一个配置设置吗?如果是,在哪里?-显然我可以为会议记录设置一个AppSetting,但可能在某个地方有一个安全配置设置?)
我已经搜索了此错误消息,但找不到任何提及它的地方。
我使用过FederationAuthentication.SessionAuthenticationModule.CreateSessionSecurityToken,也尝试过HttpContext.Current.ApplicationInstance.Modules("SessionAuthenticationModule") --它们都能在我的开发机器上工作,但都不能在服务器上工作。
服务器安装了Windows2008 R2,我安装了Windows7专业版。两者都具有IIS 7.5.7600.16385。两者都使用dotNetFx45_Full_setup.exe v4.5.50709.17929安装了.NET 4.5。为了进行测试,我只是在默认网站下使用一个虚拟应用程序,它使用一个64位的应用程序池和一个集成的管道,两个应用程序池都在AppPoolIdentity下运行。
CreateSessionSecurityToken是从会话身份验证模块添加声明后执行的页面调用的。
它肯定是相当简单的东西,但我需要帮助弄清楚它是什么!会非常感谢你的帮助。
谢谢菲尔
发布于 2013-03-06 14:00:03
所有的样例都说“使用DateTime.UtcNow",你能试试吗?此外,还可以将null粘贴到ValidTo,以指定应通过将SessionSecurityTokenHandler.DefaultTokenLifetime属性的值与validFrom参数指定的时间相加来确定该值。
https://stackoverflow.com/questions/15224945
复制相似问题