1

与参考。到 brockallen.com/2013/02/21/server-side-session-token-caching-in-wif-and-thinktecture-identitymodel

我想对Id.Srv 使用服务器端会话。3并使用Redis 缓存作为会话存储创建了ITokenCacheRepository的实现。

除了实现之外,我还在 Id.Srv的Global.asax中添加了以下代码。项目:

    protected void Application_Start(object sender, EventArgs e)
    {
        PassiveSessionConfiguration.ConfigureSessionCache(new SessionManagerCache(sessionManager));
    }

    public override void Init()
    {
        PassiveModuleConfiguration.CacheSessionsOnServer();
    }

其中 SessionManagerCache 是 ITokenCacheRepository 实现,而 sessionManager 是其中使用的 Redis 缓存。

我在 web.Config 中也有这些configSections -

<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() 中抛出此异常 -

throw new ArgumentException("SessionAuthenticationModule is null");

我检查了 Init() 中 FederatedAuthentication.SessionAuthenticationModule 的值,它始终为空。

这条评论说 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 以使用自定义会话存储。但是似乎没有为 Id.Srv 设置 SessionStore 的选项。因为这些是正在创建的局部变量。

任何人都可以建议,如何解决上述错误。我错过了一些明显的东西吗?

Thinktecture.IdentityModel 能否用于与 Id.Srv 的服务器会话。3? 如果没有,使用 Id.Srv 为登录会话实现服务器会话(IsReference 模式)的替代方法是什么。3?

任何帮助将非常感激。

4

1 回答 1

0

对于任何偶然发现这一点的人,布洛克艾伦已经澄清:

“由于 IdSvr 3 不使用 SAM,因此您不能使用 IdentityModel 中的此功能。IdSvr3,因为它基于 OWIN,使用新的 cookie 身份验证中间件进行身份验证会话。这些 cookie 往往比旧的 SAM cookie 小得多,因此对缓存的需求较少。”

于 2015-08-04T14:29:48.880 回答