我已将 Apache 配置为我的 PostGraphile 服务的反向代理。我的想法是使用 Apache 进行 kerberos 身份验证,然后使经过身份验证的用户可以使用 PostGraphile 服务。
我还需要将一些自定义标头传递给该服务。
此时我可以打开 kerberos 身份验证或传递标头。一旦我打开身份验证,标题就不会出现在服务端。
这是我的虚拟主机配置:
<VirtualHost *:80>
<Location />
AuthType Kerberos
AuthName "Kerberos Authentication"
KrbAuthRealsm MY.REALM
KrbServiceName HTTP
BrowseMatch Windows gssapi-no-negotiate
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /path/to/keytab.keytab
# require valid-user # with this line uncomented headers defined later do not appear on service side
require all granted # with this line uncommented headers defined later do appear on service side however any user can access the service
ProxyPass 'http://my.service:5000'
ProxyPassReverse 'http://my.service:5000'
</Location>
<Proxy *>
Order Deny,Allow
Deny from all
Allow from local.ip.range
</Proxy>
RequestHeader set MYCUSTOMHEADER foo
</VirtualHost>
我没主意了。
我一直在阅读 Apache 文档、auth_mode_kerb 文档、堆栈线程和博客,但似乎我在这里遇到了一些奇怪的错误或遗漏了一些基本的东西......
任何提示都将非常受欢迎
经过试验,我终于找到了满足我需求的解决方案,但我必须承认,我不知道为什么它会以它看起来的方式工作。
如果我将以下内容添加到我的配置中,我可以在
Authorization
标头中传递我需要的信息。然而其他自定义标题仍然没有出现,这对我来说仍然是个谜。
编辑:
在摆弄更多之后,我发现只要我覆盖 Authorization 标头,我的自定义标头也会显示出来。很高兴了解这是预期行为(可能是安全功能)还是 mod-auth-kerb 中的错误。
编辑2:
2 年后有人指出我的配置可能有错别字:
我无法检查这个,因为我无法访问我正在使用的原始系统。而且我什至不能对那个人说谢谢,因为在指出错别字后那个人删除了评论......