Microsoft Graph Identity避免再次选择帐户

问题描述 投票:0回答:1

我正在msal4j库中使用Java Spring Boot应用程序中的身份和令牌管理来访问Microsoft Graph API。

我正在跟踪示例代码here

在代码中,由accessTokens,refreshTokens,idTokens组成的TokenCache对象存储在http会话中。

SessionManagementHelper.storeTokenCacheInSession(httpServletRequest, app.tokenCache().serialize());

static void storeTokenCacheInSession(HttpServletRequest httpServletRequest, String tokenCache){
    httpServletRequest.getSession().setAttribute('token_cache', tokenCache);
}  

现在,如果我的Spring Boot应用程序崩溃等,令牌将丢失。而且我将不得不再次进行帐户选择过程,由于用户已经选择了帐户并获得了同意,因此我想避免该过程。

如果我的应用程序重新启动,如何避免再次进行帐户选择过程?我需要将令牌缓存存储在数据库中吗?

我的授权URL如下:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
response_type=code&
redirect_uri=https%3A%2F%2Flocalhost%3A8443%2Fmsal4jsample%2Fsecure%2Faad&
client_id=ca146462-8880-424c-b629-cc7c0d0fb1b3&
scope=openid+offline_access+profile+https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&
prompt=select_account&
state=69a2ac0f-abac-46ad-b525-88f0b70182b7&
nonce=9278f424-6858-4e22-bb13-7b13894abda7
java oauth outlook microsoft-graph microsoft-identity-platform
1个回答
0
投票

我希望您遇到的应用崩溃情况是在托管之前。当应用程序崩溃时,浏览器与应用程序之间的连接断开。当应用程序再次重新启动时,将建立新的连接,需要再次进行帐户选择过程。

关于令牌缓存存储,如this文档中所述,客户报告了使用Redis和其他分布式缓存存储时的良好结果

For security and performance reasons,我们的建议是序列化每个用户一个缓存。序列化事件基于已处理用户的身份来计算缓存密钥,并为该用户序列化/反序列化令牌缓存。

以下是一些有关令牌缓存的文档。所有文档都讨论了在服务器端存储(缓存)令牌的问题,这些文档还具有指向GitHub samples的链接以供编码参考。

附加documentations供参考。

© www.soinside.com 2019 - 2024. All rights reserved.