在 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)是最好的解决方法。
请务必在使用前检查令牌的到期日期。
我们正在从 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)是最好的解决方法。 请务必在使用前检查令牌的到期日期。