消费者和提供者之间的代理oAuth请求

时间:2011-05-10 08:56:12

标签: php proxy oauth http-headers

我们遇到了如何使用消费者(客户端)和提供者(oAuth服务器)之间的中间代理服务器代理oAuth 1.0a 请求的问题。

基本上它看起来像这样:

------------
| Consumer |
------------
      |
      V
------------
|  Proxy   |
------------
      |
      V
----------------
| oAuth Server |
----------------

我们想到的可能问题是,当向我们的oAuth服务器重新发送HTTP请求时,代理服务器的Apache会将一些请求Header设置为不同的值,并且在oAuth服务器上签署请求时,签名不匹配。

您是否知道代理服务器是否有重新发送请求而不进行任何修改的方式,因此签名在oAuth情况下是否有效?

我们正在考虑的另一个选项是在签名之前替换oAuth服务器上的已修改标头,从而将请求修改为不是来自代理,而是直接来自客户端。您是否认为这在PHP中是可行的 - 替换请求的标头,例如$ _SERVER变量?

谢谢

1 个答案:

答案 0 :(得分:1)

事实证明,客户端在签署请求时使用的唯一HTTP标头是HTTP HOST标头。如果oAuth参数作为OAuth标头传递,则不包括特殊的OAuth标头。

所以代理应该做的唯一事情就是向我们发送客户端用来签署请求的HOST头。

实施例: 让我们假设,如果客户端(消费者)向代理服务器发出HTTP请求以获取令牌,它会将请求发送到以下端点:

  

http://proxy.com/oauth/request

在这种情况下,请求将是这样的,并且在签署请求时将使用带有值proxy.com的主机头。

POST /oauth/request HTTP/1.1
Host: proxy.com

假设我们的oAuth服务器期望请求的端点是:

  

http://oursite.com/oauth/request

当代理服务器收到请求时,它可以将其重新发送到我们的端点,并在我们可以用来在我们这边签署请求的额外HTTP头中给我们值proxy.com,而不是使用原来的HOST头。有价值的是我的网站