本文介绍您使用外部身份进行身份验证时,如何使用 Identity-Aware Proxy (IAP) 管理会话。
刷新会话
Identity Platform 会话的有效期为一小时。会话过期时,您的应用需要重定向到身份验证页面。身份验证页面包含 Identity Platform 刷新令牌。只要用户的凭据仍然有效,您就可以使用它重新进行身份验证,而无需显示任何界面。
如果用户最近更改了他们的电子邮件地址或密码,或者发生了其他撤消其令牌的操作,则他们将需要再次完成身份验证流程。
处理非 AJAX 请求
假设正确配置了身份验证页面,系统会使用应用重定向自动处理非 AJAX 请求。
处理 AJAX 请求
Chrome 浏览器和其他浏览器将弃用 第三方 Cookie。如果第三方 Cookie 被停用,则在此页面发出 AJAX 请求的建议将不起作用。不过,如果 AJAX 请求的来源和目标都来自同一网站,则所提供的建议仍将有效。
如需了解如何在 Chrome 中管理第三方 Cookie,请参阅在 Chrome 中删除、允许 和管理 Cookie。
如果您发送了一个其令牌已过期的 AJAX 请求,则该请求将返回 401: Unauthorized 状态代码。实施以下解决方案之一来解决此问题:
- 修改您的应用代码以处理 HTTP
401状态代码。 - 将
iframe添加到您的应用中以指向会话刷新者。 - 指示您的用户手动将会话刷新者加载到单独标签页中。
如果您收到的是 302 状态代码而不是 401,为了响应 AJAX 请求,请添加一个值为 XMLHttpRequest 的 X-Requested-With 标头。这可向 IAP 通知该请求源自 JavaScript。
以编程方式处理 HTTP 401
建议以编程方式处理 HTTP 401 状态代码来刷新 AJAX 会话。为此,请执行以下操作:
更新您的应用代码以处理该错误。
添加一个处理程序,该处理程序会打开一个窗口以对用户重新进行身份验证,然后在此过程完成时将其关闭。
使用 iframe
如果您无法以编程方式处理 HTTP 401,下一个最佳解决方案是在应用中添加一个指向会话刷新者的 iframe。
使用 iframe 需要您在与 IAP 保护的 Web 应用相同的网域中配置自定义登录页面。否则,用户会遇到跨源错误。如需详细了解登录页面配置,请参阅 创建自定义登录页面。
iframe 的用法示例:
<iframe src="https://example.com/some/path?gcp-iap-mode=SESSION_REFRESHER" style="width:0;height:0;border:0; border:none;"></iframe>
加载会话刷新者
作为最后的补救措施,您可以指示用户手动加载会话刷新者。向您的应用或其文档添加指导,指示用户在单独的标签页中打开以下网址:
https://example.com/some/path?gcp-iap-mode=SESSION_REFRESHER
让用户退出账号
如需让用户从 IAP 资源中退出登录,请使用查询参数 ?gcp-iap-mode=GCIP_SIGNOUT。例如,在 App Engine 应用中,网址如下所示:
https://example.com/some/path?gcp-iap-mode=GCIP_SIGNOUT
用户在退出登录后将被重定向回登录页面。
如需让用户从所有资源和会话退出登录,请使用 API 密钥将他们重定向到身份验证网址,并附加 mode=signout 作为参数。例如:
https://auth.example.com/?apiKey=API-KEY&mode=signout
退出完成后,用户将保留在页面上。建议您在 AuthenticationHandler 对象上实现 completeSignOut() 回调,以向用户提供他们已成功退出的反馈。
在租户之间切换
在某些情况下,用户可能需要向同一 IAP 资源的多个租户进行身份验证。例如,他们可能属于多个租户,这些租户会授予不同级别的访问权限,并且想要切换至具有更少或更多特权的租户。
如需强制重启租户选择流程,请使用 ?gcp-iap-mode=CLEAR_LOGIN_COOKIE。例如,在 App Engine 应用中,网址可能如下所示:
https://PROJECT-ID.appspot.com/some/path?gcp-iap-mode=CLEAR_LOGIN_COOKIE