Asp.net mvc 4 参数名称:使用ADFS声明时validFrom超出范围异常

Asp.net mvc 4 参数名称:使用ADFS声明时validFrom超出范围异常,asp.net-mvc-4,claims-based-identity,adfs,Asp.net Mvc 4,Claims Based Identity,Adfs,我有一个简单的MVC.NET4.5应用程序,并使用外部网页登录 服务器使用ADFS 我正确配置了应用程序的web.config,登录时一切正常 通过ADFS发送到应用程序,并重定向回包含所有用户信息的应用程序 最近,我在外部网页上按login后出现以下错误: [ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: validFrom]

我有一个简单的MVC.NET4.5应用程序,并使用外部网页登录 服务器使用ADFS

我正确配置了应用程序的web.config,登录时一切正常 通过ADFS发送到应用程序,并重定向回包含所有用户信息的应用程序

最近,我在外部网页上按login后出现以下错误:

   [ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: validFrom]
   Microsoft.IdentityModel.Tokens.SessionSecurityToken..ctor(IClaimsPrincipal claimsPrincipal, UniqueId contextId, String context, String endpointId, Nullable`1 validFrom, Nullable`1 validTo, SymmetricSecurityKey key) +1038
   Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, String endpointId, DateTime validFrom, DateTime validTo) +276
   Microsoft.IdentityModel.Web.SessionAuthenticationModule.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, DateTime validFrom, DateTime validTo, Boolean isPersistent) +144
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +559
   Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +256
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
为什么会出现这个错误?
在web.config中,我没有
validFrom
变量,在controllers方法中也没有。

显然,发生异常是因为validFrom>=ValidTo;见本报告第262行。但这仍然不能解释您的配置有什么问题

一种可能的解释是您的安全令牌生存期太短。不久前,我做了一些涉及令牌过期的测试。为了避免每次测试会话都要等待30分钟,我将令牌生存期缩短为1分钟:

<securityTokenHandlers>
  <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
  <add type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
    <sessionTokenRequirement lifetime="00:01:00"></sessionTokenRequirement>
  </add>
</securityTokenHandlers>

一切都很顺利。但几周后,当我回到相同的测试环境时,我得到了OP所描述的相同错误。我的猜测是,两台机器之间的时钟偏移缓慢上升,直到最后超过60秒。从那时起,代币的有效期已经超过了ValidFrom

再说一次,我只是在猜测。但我知道,一旦我恢复了原始令牌30分钟的生存时间,一切又恢复了正常

<sessionTokenRequirement lifetime="00:30:00"></sessionTokenRequirement>


假设时钟偏移是错误的潜在原因,我肯定会检查所有(虚拟)相关机器的时区设置。想象两个时钟,都显示上午10点,但配置了不同的时区。。。即使是30分钟的生命也无法弥合这一差距