本页面介绍了 Identity-Aware Proxy (IAP) 如何处理 会话过期,以及如何确保 AJAX 应用 请求和 WebSocket 请求是否成功。
IAP 会话流程
使用标准 IAP 登录流程时,用户会收到引用其 Google 登录会话的会话 Cookie。IAP 会使用此 Cookie 确认用户仍处于登录状态。IAP 要求用户登录才能访问受 IAP 保护的应用。
IAP 会话会定期刷新。但是,如果用户使用 Google 账号登录,则 IAP 会话也会与用户的 Google 登录会话绑定。在这种情况下,IAP 只会要求客户在遇到以下情况之一时重新登录:
- 用户退出了他们的账号
- 他们的账号已被暂停
- 该账号需要重设密码
如果用户退出,IAP 会在几分钟内检测到 Google 账号状态更改。一旦检测到,IAP 将使会话无效。
IAP 将在有效会话期间针对所有请求重新检查 Identity and Access Management (IAM) 授权。对受 IAP 保护的应用的 IAM 访问权限政策的更新可能需要几分钟才能生效。
IAP 会话过期
对于使用 Google 账号的登录流程,IAP 会话会与底层 Google 登录会话绑定,并且仅在该会话过期后过期,无论授权标头中发送的 JWT 中的 exp
声明如何。
对于程序化身份验证,IAP 遵循 Authorization 标头中发送的 JWT 中的 exp
声明。
对于 Identity Platform 登录流程,用户退出后,IAP 会话将保留最长一小时。
WebSocket 请求
IAP 仅支持初始请求的 WebSocket,并且不会持续检查授权。收到 WebSocket 请求时,
以 HTTP Upgrade
请求开头。
IAP 会将这种情况评估为
标准 HTTP GET
请求。请求获得授权后
将请求传递给服务器,从而建立持久连接。之后
IAP 不会监控请求或刷新会话。
会话响应过期
IAP 根据请求的类型为过期的会话返回不同的响应。
非 AJAX 请求
对于非 AJAX 请求,用户会被重定向到登录流程以刷新会话。如果用户仍处于登录状态,则此重定向是透明的。
AJAX 请求
Chrome 浏览器和其他浏览器将逐步停用第三方 Cookie。有关在此页面中发出 AJAX 请求的建议 如果第三方 Cookie 不起作用 处于停用状态不过,如果 AJAX 请求的来源和目标都来自同一网站,则提供的建议仍会有效。
要了解如何在 Chrome 中管理第三方 Cookie,请参阅删除、允许 在 Chrome 中管理 Cookie。
IAP 依靠 Cookie 来管理用户会话。它也依赖一系列重定向在登录流程中建立会话。如果应用使用跨源资源共享 (CORS) 对受 IAP 保护的应用发出 AJAX 请求,则并不总是能建立会话。
要成功向受 IAP 保护的应用发出 CORS 请求,需要在带外建立 IAP 会话。请注意,对于从 source_domain->target_domain
发送 CORS 请求(其中 target_domain
托管受 IAP 保护的应用)的 AJAX 请求,需要在 target_domain
上建立一个会话。无法在 source_domain
和 target_domain
之间共享 Cookie。
在 target_domain
上建立会话后,开发者就需要启用在请求中发送的凭据。默认情况下,JavaScript 方法不会将 Cookie 附加到请求。如需在请求中启用凭据,使用 XMLHttpRequest
对象发送的请求需要将 withCredentials
属性设为 true,而使用 Fetch API
发送的请求则需要将 credentials
选项设置为 include
或 same-origin
。
以下指南建议网络开发者使用一种模式,以便能够成功建立和刷新 IAP 会话。
了解 IAP 响应
对于 AJAX 请求,IAP 会返回 HTTP 401: Unauthorized
状态代码。请注意,AJAX 请求检测无法完全执行。对于 AJAX 请求,如果您收到 302
状态代码响应(而非 401
状态代码),则可以将值为 "XMLHttpRequest"
的 X-Requested-With
标头可添加到 AJAX 请求。这可向 IAP 表明该请求源自 JavaScript。
处理 HTTP 401
AJAX 响应
如需在应用收到 HTTP 401
之后建立 IAP 会话,应用可以打开指向网址 target_domain
+ ?gcp-iap-mode=DO_SESSION_REFRESH
的新窗口。这是一个特殊处理程序,仅在 target_domain
建立 IAP 会话。如果窗口保持打开状态,则它将定期刷新会话,要求用户根据需要提供输入。或者,用户可以选择关闭该窗口,开发者代码中 HTTP 401
状态的处理程序应再次弹出一个窗口,以便根据需要刷新会话。
第 1 步:修改应用代码
以下示例展示了如何修改应用代码以处理 HTTP 401
状态代码并向用户提供会话刷新链接:
第 2 步:安装 onclick 处理程序
以下示例代码会安装一个 onclick 处理程序,该程序会在会话刷新后关闭窗口: