为什么PayPal使用HTTP请求标头进行API身份验证?

时间:2012-03-02 02:25:07

标签: http http-headers paypal http-authentication

我只是阅读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

3 个答案:

答案 0 :(得分:10)

为什么要使用HTTP标头而不是请求正文中的内容?

通过将身份验证信息与有效负载(您正在传输的数据)分开,可以更轻松地在请求管道的早期阶段处理身份验证。例如,网守服务器可以通过仅查看标头来接收请求并对它们进行身份验证,然后将它们传递给解析请求主体并完成实际工作的模块/服务器/类。

如果请求未通过身份验证,则可能会在请求接近处理该资金的代码之前将其拒绝。

当然,无论如何,您都可以通过这种方式构建系统,但将其保存在标题中意味着您无需解析请求体甚至查看它。如果要在将标头传递到另一台服务器之前修改标头,也无需担心调整Content-Length:

为什么要使用自定义HTTP标头而不是WWW-Authenticate或Cookie?

我认为这仅仅是因为PayPal想要一个比这些中任何一个都能容纳的更强大的方案。 WWW-Authenticate仅允许基本(明文)和摘要(MD5)认证,并且自编写这些规范以来已经开发了许多更好的方案。他们也不允许使用用户名和密码。

Cookie是技术上不透明的数据位,您可以从服务器接收并更改回传递给它。同样,他们可以告诉你如何生成你在Cookie标头中传递的信息,但这不会真正遵循规范,所以在这一点上,为什么不只是使用一些自定义标题?

答案 1 :(得分:2)

如果双方之间的连接受到信任且SSL已实施,则HTTP Authentication是一种易于实施方式,可在两个固定方之间进行身份验证。如果身份验证失败,则仅在流量级别拒绝连接。

我不认为Paypal使用HTTP身份验证进行付款吗?您是否只是为了访问API功能来为PayPal帐户构建自己的管理界面?

答案 2 :(得分:2)

“HTTP身份验证:基本和摘要访问身份验证”中介绍了 HTTP访问身份验证过程,请查看here

建议用户代理在解析WWW-Authenticate字段值时要特别小心,因为它可能包含多个质询,或者如果提供了多个WWW-Authenticate头字段,则质询本身的内容可以包含以逗号分隔的身份验证参数列表。