【发布时间】:2017-05-16 17:49:57
【问题描述】:
我们有一个托管在 Apache 上的 Angular 应用程序,它正在进行 QA 测试。该应用通过 Apache 的 httpd.conf 中的反向代理设置与托管我们的 Web 服务的应用服务器通信:
ProxyPass /SVCS/ https://dev.mycompany.test/SVCS/
ProxyPassReverse /SVCS/ https://devws.mycompany.test/SVCS/
我们注意到原始开发人员在 JavaScript 中硬编码了下游 Web 服务所需的 Basic Auth 标头。我们想从 Web 应用程序中删除它,而是让 Apache 在代理请求中附加 Basic Auth 标头。
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin: "*"
Header set Access-Control-Allow-Methods: "OPTIONS, GET"
Header set Access-Control-Max-Age: 1
Header set Access-Control-Allow-Credentials: true
Header set Access-Control-Allow-Headers: "authorization, X-my-header, X-your-header"
RequestHeader set Authorization "Basic FOOBAR123ZZZZZZZZZZZZZZZZZZZZZ="
</IfModule>
这个 IfModule sn-p 已经在文件中了,我只是添加了 RequestHeader 行(在这里混淆了)。一旦添加,浏览器就会开始提示输入用户名/密码“需要身份验证”。我尝试设置 Access-Control-Allow-Credentials=false 但没有效果。 Basic auth 用户/密码是为应用程序创建的用于访问 Web 服务的服务帐户,我们不希望最终用户输入任何内容,他们已经通过 SSO 从另一个应用程序进行身份验证。
如何将基本身份验证添加到代理请求的标头而不提示用户输入密码?
我尝试了这篇文章apache-basic-authentication-issue-with-reverse-proxy 的内容,它基本上配置了一个密码文件。但这不起作用,即使输入正确的密码,服务也会返回未授权的 401(另外我不希望用户输入任何内容)
【问题讨论】: