С исх. на brockallen.com/2013/02/21/server-side-session-token-caching-in-wif-and-thinktecture-identitymodel
Я хочу использовать сеансы на стороне сервера с Id.Srv. 3 и создали реализацию ITokenCacheRepository с использованием Redis Cache в качестве хранилища сеансов.
Помимо реализации, я добавил следующий код в Global.asax Id.Srv. проект:
protected void Application_Start(object sender, EventArgs e)
{
PassiveSessionConfiguration.ConfigureSessionCache(new SessionManagerCache(sessionManager));
}
public override void Init()
{
PassiveModuleConfiguration.CacheSessionsOnServer();
}
где SessionManagerCache - это реализация ITokenCacheRepository, а sessionManager - это Redis Cache, используемый внутри нее.
У меня также есть эти configSections в web.Config -
<section name="system.identityModel" ...
<section name="system.identityModel.services" ...
а также раздел system.identityModel -
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="Identity.TestServer.AuthorizationManager, Identity.TestServer" />
</identityConfiguration>
</system.identityModel>
где AuthorizationManager - это производное ClaimsAuthorizationManager.
При запуске из CacheSessionsOnServer () возникает это исключение -
выбросить новое исключение ArgumentException ("SessionAuthenticationModule имеет значение null");
Я проверил значение FederatedAuthentication.SessionAuthenticationModule в Init (), и оно всегда равно нулю.
В этом комментарии говорится, что Id.Srv. использует SAM для отслеживания сеансов входа в систему -
https://github.com/IdentityModel/Thinktecture.IdentityModel.45/issues/118#issuecomment-24202385
Однако после проверки Id.Srv. код, это верно для Id.Srv. 2.
В Id.Srv. 3, аутентификация файлов cookie. похоже, использовался - https://github.com/IdentityServer/IdentityServer3/blob/master/source/Core/Configuration/AppBuilderExtensions/ConfigureCookieAuthenticationExtension.cs#L49
В CookieAuthenticationOptions есть возможность настроить SessionStore на использование настраиваемого хранилища сеансов. Однако, похоже, нет возможности установить SessionStore для Id.Srv. поскольку это создаются локальные переменные.
Кто-нибудь может предложить, как решить указанную выше ошибку. Я упускаю что-то очевидное?
Можно ли использовать Thinktecture.IdentityModel для сеансов сервера с Id.Srv. 3? Если нет, каковы альтернативы реализации сеансов сервера (режим IsReference) для сеансов входа в систему с использованием Id.Srv. 3?
Любая помощь могла бы быть полезна.