我正在从 ADAL 库中迁移我的 ASP.NET MVC 应用程序,因为它们今年将结束安全更新。我们应用程序的用例似乎指向为授权令牌使用会话缓存。用户只在第一次登录时才真正需要它,然后再也不需要了,所以我想在这里使用一些轻量级的东西。
内存缓存对我来说真的没有意义。我们的应用程序将在相当有规律的负载下水平扩展,因此当用户登陆时内存中的令牌可能不存在。我想将令牌放入会话中,这样它就可以跨实例跟随用户,而无需设置 Redis 或 SQL 服务器缓存(即文档中的分布式令牌缓存选项)。
在 ASP.Net Core 中有一些关于如何执行此操作的文档,但非 Core ASP.Net 文档(与上面链接的同一页面)都没有提到会话缓存。ASP.NET MVC 是否有现成的会话缓存?
目前,我的想法是尝试修改 IConfidentialClientApplication 实例以获取会话缓存,但我没有看到这样做的方法。这是它的配置位置:
public static IConfidentialClientApplication GetIConfidentialClientApplication() {
if (clientapp == null) {
clientapp = ConfidentialClientApplicationBuilder.Create(ConfigurationManager.AppSettings["ClientId"])
.WithClientSecret(ConfigurationManager.AppSettings["ClientSecret"])
.WithRedirectUri(ConfigurationManager.AppSettings["RedirectUrl"])
.WithAuthority(ConfigurationManager.AppSettings["Authority"])
.Build();
}
return clientapp;
}
现在在这里我可以通过依赖注入修改 clientapp 以插入我自己的 DistributedSessionCache,或者使用其中一个内置的,但我在这里看不到任何 SessionCaches。Asp.Net Core 有一个内置的会话缓存,它依赖于修改我在 Asp.Net MVC 中没有公开(我知道)的服务对象。