0

我正在尝试使用 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 模块添加声明后执行的页面调用的。

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

谢谢菲尔

4

1 回答 1

3

All samples says "Use DateTime.UtcNow", can you try it? Also you can paste null to a ValidTo to specify that the value should be determined by adding the value of the SessionSecurityTokenHandler.DefaultTokenLifetime property to the time specified by the validFrom parameter.

于 2013-03-06T06:00:02.877 回答