我们正在从ADAL4J迁移到MSAL4J。在ADAL中,我们将刷新令牌存储在数据库中,并在不同的微服务之间共享,以进行令牌交换。使用MSAL,刷新令牌不易访问。我们构建代码的方式很难摆脱“刷新令牌”的使用。因此,我们正在寻找一种在MSAL中获取刷新令牌的解决方案。
目前,我们有一些建议(scala中有代码示例):
选项1.将包作用域类msal.AuthenticationResult转换为自定义的结果类
助手类在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所示。
这些选择是否可以接受?如有任何建议,敬请谅解!
发布于 2022-03-06 23:24:42
查看文章中列出的解决方案,我相信从令牌缓存(选项2)中检索令牌是最好的方法。只需确保在使用之前检查令牌的过期日期。
https://stackoverflow.com/questions/71289455
复制相似问题