SessionAuthenticationModule "validFrom" кажется недопустимым с ThinkTecture
У меня есть веб-сайт 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, а не веб-сервером (IIS)?
Есть идеи?