所以我试图实现以下场景:
- 应用程序受基本身份验证保护。假设它托管在
app.com
- 应用程序前面的 HTTP 代理也需要身份验证。它托管在
proxy.com
因此,用户必须在同一请求中为代理和应用程序提供凭据,因此他有不同的用户名/密码对:一对用于针对应用程序验证自己,另一个用户名/密码对用于针对代理验证自己。
阅读规范后,我不确定我应该如何实现这一点。我想做的是:
- 用户在没有任何身份验证的情况下向代理发出 HTTP 请求。
- 代理回答
407 Proxy Authentication Required
并返回Proxy-Authenticate
格式为: 的标头"Proxy-Authenticate: Basic realm="proxy.com"
。
问题:此Proxy-Authenticate
标头设置正确吗? - 客户端然后使用
Proxy-Authorization
标头重试请求,即代理的 Base64 表示username:password
。 - 这次代理对请求进行身份验证,但随后应用程序使用
401 Unauthorized
标头进行响应。用户由代理验证,但不是由应用程序验证。WWW-Authenticate
应用程序会在响应中添加一个标头,例如WWW-Authenticate: Basic realm="app.com"
. 问题:此标头值正确吗? Proxy-Authorization
客户端再次使用标头和标头重试请求,该标Authorization
头的值是应用程序的 Base64 表示username:password
。- 此时,代理成功地验证了请求,并将请求转发给对用户进行身份验证的应用程序。客户终于得到了回复。
整个工作流程是否正确?