我一直在与 adb2c 斗争一段时间。特别是刷新流程。我正在使用最新版本msal-browser并且一切正常,刷新令牌效果很好。唯一的问题是令牌端点返回的refresh_token总是会在一天后过期。在这种情况下,用户只能登录一天,之后,用户将始终需要重新授权。这是端点的示例以及它在登录后直接返回的内容。(请注意,access_token为了测试目的,我已将过期时间设置为5 分钟)
端点:
https://{b2c_domain.onmicrosoft.com/{b2c_policy}/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)
回复:
{
"access_token": "{access_token_hidden}",
"id_token": "{id_token_hidden}",
"token_type": "Bearer",
"not_before": 1610023338,
"expires_in": 300,
"expires_on": 1610023638,
"resource": "{resource_hidden}",
"client_info": "{client_info}",
"scope": "https://{adb2c_domain_hidden}.onmicrosoft.com/api/user_impersonation",
"refresh_token": "{refresh_token_hidden}",
"refresh_token_expires_in": 86400
}
Run Code Online (Sandbox Code Playgroud)
当应用程序在某个时候尝试刷新令牌时,它将再次调用令牌端点。这是第二个响应的样子:
{
"access_token": "{access_token_hidden}",
"id_token": "{id_token_hidden}",
"token_type": "Bearer",
"not_before": 1610023891,
"expires_in": 300,
"expires_on": 1610024191,
"resource": "{resource_hidden}",
"client_info": "{client_info}",
"scope": "https://{adb2c_domain_hidden}.onmicrosoft.com/api/user_impersonation",
"refresh_token": "{refresh_token_hidden}",
"refresh_token_expires_in": 85846
}
Run Code Online (Sandbox Code Playgroud)
在refresh_token_expires_in不滚动。但这是可以理解的,用户不应始终保持登录状态。但是,在我的 adb2c 策略中,以下设置处于活动状态:
我会假设,正如我在设置中配置的那样,刷新令牌至少应该处于活动状态 14 天。如果没有,甚至长达 90 天?我可以使用这些设置,但它总会给我一个持续 1 天的 refresh_token。有没有人有这方面的经验或有可能的解决方案?谢谢!