如何配置 Tomcat WebApp 以接受来自 Apache 的凭据

如何配置 Tomcat WebApp 以接受来自 Apache 的凭据

我正在尝试获取在 Tomcat 6 中运行的 Web 应用程序来授权经过 Apache 身份验证的用户。

我已将 Apache 2.4 配置为使用 Active Directory 进行用户身份验证(使用来自 Centrify 的模块)并向 Tomcat 发送 ProxyPass / ProxyPassReverse 请求。

现在,我正在尝试弄清楚如何在应用程序中使用这些凭据。以 Tomcat 6 管理器应用程序为例,我该如何更改它以识别经过身份验证的用户并检查合适的角色?

我假设我必须将 server.xml 中的 Realm 更改为 JNDIRealm 或 JAASRealm,但是,文档中提到,realm 是“数据库”或用户名和密码。这是正确的做法吗?

我还假设我需要更改 web.xml 中的 login-config,尽管我还不知道要使用什么值。

如果有人能为我指明正确的方向或建议其他值得探索的途径,我将不胜感激。

顺便说一句,我也正在尝试直接在 Tomcat 中对用户进行身份验证,但被要求查看 Apache 代理路由的首选项。

答案1

我假设您正在使用 AJP 连接器。

在 AJP Connector 节中设置就足够了tomcatAuthentication="false",然后来自 apache 的用户主体将被转发到 tomcat6。

根据文档,用户将失去角色,这可能会根据应用程序产生一些麻烦。

tomcatAuthentication:如果设置为 true,则身份验证将在 Tomcat 中完成。否则,已验证的主体将从本机 Web 服务器传播并用于 Tomcat 中的授权。请注意,此主体没有与之关联的角色。默认值为 true。

答案2

不能将 Tomcat 角色基础授权与 Apache 中完成的身份验证混合在一起。

您可以在 tomcat 中执行所有操作(身份验证和授权),或者 - 更合理 - 使用您在服务器变量中找到的信息(从 apache 发送到 tomcat)在您的 webapp 中进行阶段授权。

在后一种情况下,您将跳过所有 tomcat 安全部分,并专注于:

  1. 从 apache 发送环境变量(setenv指令,例如收集组成员信息);
  2. 将它们收集到您的网络应用程序中。

相关内容