我有一个 ASP.NET 网站,其中有两个 IDP 服务器运行 ThinkTecture 软件,使用 WS-FED 对用户进行身份验证。
当我使用 IDP 服务器 #1 登录时,我可以正常登录,IDP 将令牌发布到我的网站,并且我按预期获得了会话令牌,我可以完美地访问该网站。
当我登录到 IDP 服务器 #2 时,我可以正常登录,并且 IDP 将我重定向回我的网站,大概是使用它尝试转换为会话令牌的 SAML 令牌。不幸的是,此时,从我的网站上我看到了这个错误:
Specified argument was out of the range of valid values.
Parameter name: validFrom
和堆栈跟踪:
System.IdentityModel.Tokens.SessionSecurityToken..ctor(ClaimsPrincipal claimsPrincipal, UniqueId contextId, String id, String context, Byte[] key, String endpointId, Nullable`1 validFrom, Nullable`1 validTo, UniqueId keyGeneration, Nullable`1 keyEffectiveTime, Nullable`1 keyExpirationTime, SctAuthorizationPolicy sctAuthorizationPolicy, Uri securityContextSecurityTokenWrapperSecureConversationVersion) +1011230
System.IdentityModel.Tokens.SessionSecurityToken..ctor(ClaimsPrincipal claimsPrincipal, UniqueId contextId, String context, String endpointId, Nullable`1 validFrom, Nullable`1 validTo, SymmetricSecurityKey key) +317
System.IdentityModel.Tokens.SessionSecurityTokenHandler.CreateSessionSecurityToken(ClaimsPrincipal principal, String context, String endpointId, DateTime validFrom, DateTime validTo) +306
System.IdentityModel.Services.SessionAuthenticationModule.CreateSessionSecurityToken(ClaimsPrincipal principal, String context, DateTime validFrom, DateTime validTo, Boolean isPersistent) +313
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase request) +1079
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +123940
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
一段时间后(大约 10 分钟)我开始看到这个错误:
ID4148: The Saml2SecurityToken is rejected because the SAML2:Assertion's NotOnOrAfter condition is not satisfied.
NotOnOrAfter: '17/07/2014 17:01:07'
Current time: '17/07/2014 17:10:08'
我正在使用 ThinkTecture 人员建议的滑动会话代码:
protected void Application_Start()
{
PassiveModuleConfiguration.EnableSlidingSessionExpirations();
}
并且当您刷新页面时,NotOnOrAfter 只会在几个小时内保持不变。
由于一台 IDP 服务器工作正常而另一台不能,我只能假设第二台 IDP 服务器上的配置在某种程度上有所不同。第二个 IDP 上的令牌生命周期设置为 10 小时。
所有 3 台服务器都有相同的时间。
我认为 SAML 断言是由 IDP 设置的,而不是 Web 服务器 (IIS)?
有任何想法吗?