我正在尝试使用SessionAuthenticationModule来创建令牌并将其写入cookie而不是使用旧的FormAuthentication.SetAuthCookie。这样我也可以向我的委托人添加索赔,并在每次请求时提供索赔。
它在我自己的计算机上工作正常,但当我部署到服务器时,我收到此错误: 指定的参数超出了有效值的范围。参数名称:keyExpirationTime
来源:System.IdentityModel Stack Trace指向其中一个重载的构造函数 - 它似乎已经从我原来的调用通过TokenHandler进入CreateSessionSecurityToken,然后通过几个构造函数。
我的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下运行。
从sessionauthennticationmodule添加声明后执行的页面调用CreateSessionSecurityToken。
它必定是相当简单的东西,但我需要帮助弄清楚它是什么!真的很感激一些帮助。
感谢 菲尔
答案 0 :(得分:3)
所有样本都说“Use DateTime.UtcNow”,你能试试吗?您还可以将null粘贴到ValidTo,以指定应通过将SessionSecurityTokenHandler.DefaultTokenLifetime属性的值添加到validFrom参数指定的时间来确定该值。