Java 版 MSAL 中的自定义令牌缓存序列化

若要在应用程序的实例之间保留令牌缓存,需要自定义序列化逻辑。 令牌缓存序列化所涉及的Java类和接口如下:

  • ITokenCache:表示安全令牌缓存的接口。
  • ITokenCacheAccessAspect :表示在访问前后执行代码的操作的接口。 你需要为 @OverridebeforeCacheAccessafterCacheAccess 实现负责序列化和反序列化缓存的逻辑。
  • ITokenCacheAccessContext :表示访问令牌缓存的上下文的接口。

下面是令牌缓存的自定义序列化的天真实现。

Warning

由于下面的示例代码不展示完整的缓存存储生命周期,因此强烈建议不要将它复制并粘贴到生产环境中。 确保了解令牌缓存的安全性和访问要求。

static class TokenPersistence implements ITokenCacheAccessAspect {
String data;

TokenPersistence(String data) {
        this.data = data;
}

@Override
public void beforeCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
        iTokenCacheAccessContext.tokenCache().deserialize(data);
}

@Override
public void afterCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
        data = iTokenCacheAccessContext.tokenCache().serialize();
}
// Loads cache from file
String dataToInitCache = readResource(this.getClass(), "/cache_data/serialized_cache.json");

ITokenCacheAccessAspect persistenceAspect = new TokenPersistence(dataToInitCache);

// By setting *TokenPersistence* on the PublicClientApplication, MSAL will call *beforeCacheAccess()* before accessing the cache and *afterCacheAccess()* after accessing the cache. 
PublicClientApplication app = 
PublicClientApplication.builder("my_client_id").setTokenCacheAccessAspect(persistenceAspect).build();

了解详细信息

了解如何使用 MSAL for Java 从令牌缓存中获取和删除帐户