问题描述
在我的 ASP.Net Core Mvc 机密 Web 应用程序中,我使用带有 AAD 的 Microsoft Identity Web/Platform,我想调用下游 WebAPI。 Web 应用程序 Startup.cs 如下:
services.AddMicrosoftIdentityWebAppAuthentication(Configuration)
.EnabletokenAcquisitionToCallDownstreamApi(new string[] { Configuration["ConfigSection:ConfigSectionScopes"] })
.AddInMemoryTokenCaches();
当用户登录时,如果我理解正确,他们的访问令牌(在登录时获得,请求访问令牌的身份验证代码流)存储在 InMemoryTokenCache 中。
如何从 MVC 控制器访问已登录用户的令牌缓存?我可以通过 ITokenAcquisition
和 GetAccesstokenForUserAsync
(提供范围)成功获取令牌,但我想检查缓存以确定令牌是否存在以及是否存在其他令牌供用户使用。我试过 var accounts = await app.GetAccountsAsync();
但这始终为空。
解决方法
AddInMemoryTokenCaches
将 IMsalTokenCacheProvider
和 IMemoryCache
注册到 IOC 容器。
在您的控制器中,您可以像这样轻松地选择两者:
public class WeatherForecastController : ControllerBase
{
private readonly IMsalTokenCacheProvider _cacheProvider;
private readonly IMemoryCache _cache;
public WeatherForecastController(IMsalTokenCacheProvider cacheProvider,IMemoryCache cache)
{
_cacheProvider = cacheProvider;
_cache = cache;
}
...
}
看看这两个,似乎你不能从 IMsalTokenCacheProvider
中提取太多价值,所以我建议坚持使用 IMemoryCache
实例