首页 > 解决方案 > 如何在没有用户交互的情况下正确刷新 SAML 令牌,即重新登录?

问题描述

有一个 Spring Boot 应用程序,它具有 SP 启动的 SSO 流,Azure AD 作为 IDP。在 Azure AD SAML 令牌的默认生命周期设置为一小时 ( NotOnOrAfterin <conditions>)。

因此,身份验证本身可以正常工作,除非 SAML 断言到期(一小时后,无论是空闲还是活动会话)。在这种情况下,应用程序返回 401 并将用户重定向到登录页面。但我知道要求用户每小时重新登录是不正确的。

我已经尝试过IsPassive+ ForceAuthn,这个解决方案对我来说似乎很有希望,但不幸的是没有奏效。AzureAD 向我返回以下内容: AADSTS50058: A silent sign-in request was sent but no user is signed in.

有没有办法让用户在没有任何进一步用户交互的情况下保持登录状态并重定向到登录页面?例如 24 小时,但不更改 IDP 端的 SAML 断言生命周期。或者这就是 SAML 的工作方式,并且当断言过期时,用户每次都必须重新登录?

标签: spring-securityactive-directoryazure-active-directorysingle-sign-onsaml

解决方案


如果您使用的是隐式流,那么这不支持刷新令牌。但是,您可以静默请求令牌。

代码通过仅将 clientId 作为范围传递给 acquireTokenSilent 来帮助您手动更新令牌。

您可以在此处阅读有关刷新令牌的信息。


推荐阅读