Azure WebApps下Tomcat8.5.58+版本ONELOGIN SAML认证报错解决方案咨询
问题根因
Tomcat从8.5.58版本开始优化了RemoteIpFilter的安全校验逻辑,新增了默认的可信内部代理IP限制,仅允许127.0.0.0/8、::1等本地环回地址识别转发头。而Azure Web Apps的前端反向代理IP段不在默认的可信列表内,导致原有配置中x-forwarded-proto头无法被Tomcat正常识别,最终SAML响应的回调地址被生成为HTTP协议而非HTTPS。
你在KUDU中直接修改系统默认server.xml报错是因为Azure App Service的系统软件目录均为只读权限,不允许直接修改内置配置文件。
解决方案
方案一:修改现有RemoteIpFilter配置(无需调整server.xml,推荐)
在原有web.xml的RemoteIpFilter配置中新增internalProxies初始化参数,配置为允许所有内部代理(Azure Web Apps的前端请求均来自平台可信代理,该配置无安全风险),修改后的完整配置如下:
<filter> <filter-name>RemoteIpFilter</filter-name> <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class> <init-param> <param-name>remoteIpHeader</param-name> <param-value>x-forwarded-for</param-value> </init-param> <init-param> <param-name>remoteIpProxiesHeader</param-name> <param-value>x-forwarded-by</param-value> </init-param> <init-param> <param-name>protocolHeader</param-name> <param-value>x-forwarded-proto</param-value> </init-param> <!-- 新增以下配置项 --> <init-param> <param-name>internalProxies</param-name> <param-value>.*</param-value> </init-param> </filter> <filter-mapping> <filter-name>RemoteIpFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
修改后重新部署应用即可生效。
方案二:自定义server.xml全局配置(适合需要配置全局生效的场景)
- 下载对应8.5版本Tomcat的默认server.xml文件,或在KUDU中将系统默认server.xml拷贝到应用可写目录
- 修改server.xml中的HTTP Connector配置,新增3个属性:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" <!-- 新增以下3个属性 --> scheme="https" secure="true" proxyPort="443" />
- 将修改后的server.xml上传到应用的
/home/site/conf/目录,目录不存在可手动创建 - 进入Azure门户Web应用配置页,在「应用设置」中新增配置项:
- 键:
CATALINA_OPTS - 值:
-Dcatalina.config=file:/home/site/conf/server.xml
- 键:
- 保存配置后重启应用即可生效。
内容的提问来源于stack exchange,提问作者masapiko
相关产品推荐
相关产品推荐

