在 ADAL 到 MSAL 的迁移过程中从 MSAL 获取刷新令牌

Obtaining Refresh Token from MSAL during ADAL to MSAL migration

我们正在从 ADAL4J 迁移到 MSAL4J。在 ADAL 中,我们将刷新令牌存储在数据库中,并在不同的微服务之间共享它以进行令牌交换。使用 MSAL,刷新令牌不容易访问。我们构建代码的方式很难摆脱“刷新令牌”的使用。所以我们正在寻求在MSAL中获取刷新令牌的解决方案。

目前我们有几个建议(代码示例在scala中):

选项 1. 将包范围 class msal.AuthenticationResult 转换为自定义结果 class

助手 class 在 com.microsoft.aad.msal4j

下定义
package com.microsoft.aad.msal4j

trait AADTokenExchangeHelper(...) {
    def acquireToken(...) = {
      val result = app.acquireToken(requestParams).get.asInstanceOf[AuthenticationResult]
      // store result.getRefreshToken
    }
}

选项 2. 解析 TokenCache 并获取刷新令牌

val tokenCache: String = app.tokenCache().serialize()
val tokensMap = ObjectMapper.fromJson[String, Map[String, Any]](tokenCache)
val refreshTokensMeta = tokensMap("RefreshToken")
 .asInstanceOf[Map[String, Map[String, String]]]
 .values
 .toSeq
// may filter by client_id
val refreshTokens = refreshTokensMeta.map(m => m("secret"))

选项 3.自定义 TokenCache

我这里没有完整的细节。看来我们需要像方案2一样解析缓存字符串

这些选项可以接受吗?任何建议表示赞赏!

查看您 post 中列出的解决方案,我认为从令牌缓存中检索令牌(选项 2)是最好的解决方法。 请务必在使用前检查令牌的到期日期。