登录Apache Tomcat管理器是否仅支持Basic Auth?是否有其他登录实现方式?
Tomcat的身份验证基于JAAS架构设计,管理器应用本身支持多种认证方式,不局限于官方文档示例的Basic Auth,常见替代方案如下:
DIGEST摘要认证
属于Tomcat原生支持的认证方案,不会明文传输密码,仅传输密码和realm、请求方法拼接后的MD5/SHA摘要,安全性远高于Basic Auth。
配置时先通过$CATALINA_HOME/bin/digest.sh(Windows环境为digest.bat)生成摘要密码,命令示例:digest.sh -a MD5 用户名:Manager Realm:密码,再修改webapps/manager/WEB-INF/web.xml的login-config节点,将认证方式从BASIC改为DIGEST,同时同步conf/tomcat-users.xml内的密码为生成的摘要值即可。FORM表单认证
支持自定义登录页面,替代浏览器原生的Basic Auth弹窗,体验更可控,也能避免部分客户端对Basic Auth弹窗的兼容问题。
配置时修改管理器的web.xml,将login-config的认证方式改为FORM,同时指定自定义登录页、登录失败跳转页的路径,自行开发简单的HTML登录页放入管理器应用对应的路径即可生效。第三方身份源对接
上述两种认证方式都可以搭配非默认的Realm实现账号统一管理,不需要把账号密码写死在tomcat-users.xml里:- 对接数据库时可配置JDBC Realm,在
conf/server.xml的Host节点下添加Realm配置,指定数据库连接参数、用户表、角色表的查询规则,管理器会自动从指定数据源校验账号权限 - 对接企业LDAP/AD时可配置JNDI Realm,直接复用内部账号体系登录管理器
- 对接数据库时可配置JDBC Realm,在
前置代理层认证
如果Tomcat前端有Nginx、Apache等反向代理,可以把身份验证逻辑完全收敛在代理层,比如在代理层对接OAuth2、CAS等企业统一认证系统,验证通过后才允许请求转发到Tomcat管理器,同时Tomcat侧配置RemoteAddrValve仅允许代理服务器的IP访问管理器接口,不需要修改Tomcat管理器本身的任何认证配置,适合生产环境使用。
注意:无论使用哪种认证方式,都建议额外配置管理器的访问IP白名单,仅允许可信IP访问,生产环境禁止将管理器端口对外开放。
内容的提问来源于stack exchange,提问作者Maicake

