我正在尝试使用 SessionAuthenticationModule 创建令牌并将其写入 cookie,而不是使用旧的 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") - 两者都可以在我的开发机器上工作,但都不能在服务器上工作。
服务器有 Windows 2008 R2,我有 Windows 7 Professional。两者都有 IIS 7.5.7600.16385。两者都使用 dotNetFx45_Full_setup.exe v4.5.50709.17929 安装了 .NET 4.5。为了测试,我只是在默认网站下使用一个虚拟应用程序,它使用一个 64 位应用程序池和一个集成管道,两个应用程序池都在 AppPoolIdentity 下运行。
CreateSessionSecurityToken 是从在 sessionauthenntication 模块添加声明后执行的页面调用的。
这肯定是相当简单的事情,但我需要帮助弄清楚它是什么!非常感谢一些帮助。
谢谢菲尔