У меня есть приложение, которое предназначено для чтения данных арендатора от нескольких арендаторов, для чего требуется согласие администратора. Поэтому мне просто нужно хранить один токен доступа и один токен обновления из 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?
}
}