You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GCP负载均衡实现Google Cloud Run应用SAML SSO自动跳转

实现SSO自动跳转的两种方案

方案1:GCP负载均衡配置(无需修改应用代码)

直接按下面步骤调整现有重定向规则即可解决配置失效问题:

  • 规则优先级调整:新增2条重定向/转发规则,优先级设置为全局最高(数值填1、2,数值越小优先级越高)
  • 第一条规则(拦截未登录请求):
    • 匹配条件:主机填写你的应用域名,路径模式填写/*,覆盖所有请求路径,HTTP方法全选
    • 动作选择「302临时重定向」,目标地址为你的SSO登录URL,末尾拼接回调参数?redirect_uri=https://<你的应用域名>{request_uri},自动携带用户原始访问地址用于登录后回跳
  • 第二条规则(放行回调请求):
    • 匹配条件:路径模式填写你的SAML回调路径(例如/auth/saml/callback/*)
    • 动作选择「直接转发至Cloud Run后端服务」,避免回调请求被重定向造成死循环
  • 配置生效:保存后等待1-5分钟负载均衡规则同步,清除浏览器缓存后测试即可

方案2:R应用端代码实现(灵活度更高)

根据你使用的R Web框架选择对应实现逻辑即可:

针对Shiny应用

需提前安装shinyjs包,在应用启动逻辑中加身份校验跳转:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(), # 必须引入shinyjs组件
  # 以下为你的原有UI代码
)

server <- function(input, output, session) {
  # 应用启动时优先校验登录状态
  observe({
    # 替换为你的实际登录态判断逻辑,例如校验cookie中的SAML token
    has_valid_token <- !is.null(session$request$cookies$saml_auth_token)
    
    if (!has_valid_token) {
      sso_login_url <- "https://你的SSO登录地址?redirect_uri="
      # 拼接当前访问地址作为回调参数
      current_access_url <- URLencode(paste0("https://", session$request$HTTP_HOST, session$request$PATH_INFO))
      runjs(paste0("window.location.replace('", sso_login_url, current_access_url, "')"))
    }
  })
  # 以下为你的原有业务逻辑代码
}

shinyApp(ui, server)

针对Plumber应用

通过全局过滤器实现所有请求的身份校验拦截:

library(plumber)

#* 全局身份校验过滤器
#* @filter auth_check
function(req, res) {
  # 放行SAML回调路径,避免循环跳转
  if (grepl("^/auth/saml/callback", req$PATH_INFO)) {
    return(forward())
  }
  
  # 替换为你的实际登录态判断逻辑
  has_valid_token <- !is.null(req$cookies$saml_auth_token)
  
  if (!has_valid_token) {
    sso_login_url <- "https://你的SSO登录地址"
    current_access_url <- URLencode(paste0("https://", req$HTTP_HOST, req$PATH_INFO))
    res$status <- 302
    res$setHeader("Location", paste0(sso_login_url, "?redirect_uri=", current_access_url))
    return(list())
  }
  
  forward()
}

# 以下为你的原有接口/业务代码

内容的提问来源于stack exchange,提问作者Aniruddha Sengupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:42:03