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
相关产品推荐
相关产品推荐

