【发布时间】:2018-04-27 17:54:14
【问题描述】:
我有一个应用程序旨在读取来自多个租户的租户数据,这需要管理员同意。所以我只需要为每个租户从AquireTokenByAuthorizationCodeAsync() 存储一个访问令牌和一个刷新令牌。所以我想,如果我在这种场景下实现一个TokenCache扩展,是否有必要实现TokenCache.AfterAccess和TokenCache.BeforeAccess?此外,当使用AquireTokenAsync() 时,缓存位是被获取的新令牌覆盖还是只是附加到它上面?如果我想覆盖旧令牌,我可以简单地使用TokenCache.BeforeWrite 来清除旧缓存吗?
基本上,这就是我的想法:
public class ADALTokenCache : TokenCache
{
public Guid TenantId;
public ADALTokenCache(Guid tenantId) : base()
{
TenantId = tenantId;
using (var dbContext = new MyDbContext())
{
byte[] cache = dbContext.TokenCacheSet.FirstOrDefault(c => c.TenantId == TenantId);
if (cache != null)
{
Deserialize(MachineKey.Unprotect(cache, "ADALCache"));
}
}
}
void BeforeWriteNotification(TokenCacheNotificationArgs args)
{
//Could I call Clear() here so that only
//the new token from AquireTokenAsync() is written?
}
}
【问题讨论】:
标签: c# azure azure-active-directory adal