我们有一个在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片段已经在文件中,我刚刚添加了RequestHeader行(这里混淆了)。一旦添加,浏览器就会开始提示输入用户名/密码&#34;需要验证&#34;。我尝试设置Access-Control-Allow-Credentials = false但没有效果。 Basic auth用户/密码是为应用程序创建的服务帐户,用于访问Web服务,我们不希望最终用户输入任何内容,它们已通过其他应用程序的SSO进行身份验证。
如何将基本身份验证添加到代理请求的标头中,而不是提示用户输入密码?
我尝试了这篇文章apache-basic-authentication-issue-with-reverse-proxy的内容,它基本上配置了一个密码文件。但即使输入正确的密码,该服务还没有获得授权的401(另外我也不希望用户输入任何内容),这是行不通的。
答案 0 :(得分:0)
身份验证提示是因为我为所有请求设置了Authentication头而不是只需要一个服务。有一个后续服务称,如果我添加Auth标头,服务器就会抱怨身份验证。我只能将标题的设置缩小到这个服务(通过RewriteCond和RewriteRule),一切都很顺利。