我只是阅读Paypal的API文档,例如Adaptive Accounts API
我的问题:使用(自定义?)HTTP请求标头进行身份验证的原因/优势是什么,而不是"正常" POST / GET(甚至是COOKIE)变量?
在上述示例中,PayPal使用以下HTTP请求标头:
X-PAYPAL-SECURITY-USERID
X-PAYPAL-SECURITY-PASSWORD
X-PAYPAL-SECURITY-SIGNATURE
X-PAYPAL-APPLICATION-ID
X-PAYPAL-DEVICE-IPADDRESS
X-PAYPAL-REQUEST-DATA-FORMAT
答案 0 :(得分:10)
通过将身份验证信息与有效负载(您正在传输的数据)分开,可以更轻松地在请求管道的早期阶段处理身份验证。例如,网守服务器可以通过仅查看标头来接收请求并对它们进行身份验证,然后将它们传递给解析请求主体并完成实际工作的模块/服务器/类。
如果请求未通过身份验证,则可能会在请求接近处理该资金的代码之前将其拒绝。
当然,无论如何,您都可以通过这种方式构建系统,但将其保存在标题中意味着您无需解析请求体甚至查看它。如果要在将标头传递到另一台服务器之前修改标头,也无需担心调整Content-Length:
。
我认为这仅仅是因为PayPal想要一个比这些中任何一个都能容纳的更强大的方案。 WWW-Authenticate仅允许基本(明文)和摘要(MD5)认证,并且自编写这些规范以来已经开发了许多更好的方案。他们也不允许使用用户名和密码。
Cookie是技术上不透明的数据位,您可以从服务器接收并更改回传递给它。同样,他们可以告诉你如何生成你在Cookie标头中传递的信息,但这不会真正遵循规范,所以在这一点上,为什么不只是使用一些自定义标题?
答案 1 :(得分:2)
如果双方之间的连接受到信任且SSL已实施,则HTTP Authentication
是一种易于实施方式,可在两个固定方之间进行身份验证。如果身份验证失败,则仅在流量级别拒绝连接。
我不认为Paypal使用HTTP身份验证进行付款吗?您是否只是为了访问API功能来为PayPal帐户构建自己的管理界面?
答案 2 :(得分:2)
“HTTP身份验证:基本和摘要访问身份验证”中介绍了 HTTP访问身份验证过程,请查看here。
建议用户代理在解析WWW-Authenticate字段值时要特别小心,因为它可能包含多个质询,或者如果提供了多个WWW-Authenticate头字段,则质询本身的内容可以包含以逗号分隔的身份验证参数列表。