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

Grails5升级后如何配置grails-spring-security-saml 5.0.0-RC3适配HTTPS应用

Grails 5 + spring-security-saml 5.0.0-RC3反向代理HTTPS认证问题解决办法

问题场景

把Grails 4应用升级到Grails 5,同时将grails-spring-security-saml插件从4.0.2版本升级到5.0.0-RC3,用Okta作为身份提供商。HTTP协议下认证正常,但切换到HTTPS(部署在反向代理后)时,Okta的响应会因受众地址(HTTP与HTTPS不匹配)被拒绝。之前在4.0.2版本里,通过替换contextProvider为SAMLContextProviderLB解决了问题,但新版本不知道怎么操作。

配置步骤

1. 配置反向代理参数

先在应用配置文件(比如application.groovy或application.yml)中定义SAML所需的外部访问参数:

// application.groovy示例
grails.plugin.springsecurity.saml.scheme = "https"
grails.plugin.springsecurity.saml.serverName = "你的域名.com"
grails.plugin.springsecurity.saml.serverPort = 443
grails.plugin.springsecurity.saml.contextPath = "" // 应用上下文路径,无则留空
grails.plugin.springsecurity.saml.includeServerPortInRequestURL = false

2. 替换SAML上下文提供器

在grails-app/conf/spring/resources.groovy中,将默认的SAMLContextProviderImpl替换为SAMLContextProviderLB,配置如下:

import org.springframework.security.saml.context.SAMLContextProviderLB

beans = {
    samlContextProvider(SAMLContextProviderLB) {
        scheme = grailsApplication.config.grails.plugin.springsecurity.saml.scheme
        serverName = grailsApplication.config.grails.plugin.springsecurity.saml.serverName
        serverPort = grailsApplication.config.grails.plugin.springsecurity.saml.serverPort
        contextPath = grailsApplication.config.grails.plugin.springsecurity.saml.contextPath
        includeServerPortInRequestURL = grailsApplication.config.grails.plugin.springsecurity.saml.includeServerPortInRequestURL
    }
}

原理说明

SAMLContextProviderLB会强制SAML模块使用你配置的外部HTTPS地址生成断言受众,而非直接读取反向代理转发的HTTP请求信息,这样就能和Okta后台配置的HTTPS受众地址匹配,解决验证失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:39