2012-04-26 68 views
0

我正在构建一个双方的应用程序:客户端(iPhone)和服务器(PHP)。使用https进行通信。手机获得4SQ访问令牌。然后,它将该令牌发送给服务器,服务器将使用它进行4SQ API调用。我的问题是关于如何发送这个令牌。在HTTP验证标头中传递Foursquare标记。可能吗?

我的想法是将标记包含在HTTP认证请求的标题中,但在阅读了基本/摘要认证之后,我怀疑它不是这样做的方式。实际上,为了4SQ API的呼叫使用一个请求参数

组oauth_token = ACCESS_TOKEN

代替投入认证头令牌,或任何其他地方进行。我确信这有一个很好的理由,但我找不到它。

那么,哪个选项最好?

  • 电话发送令牌PHP服务器请求参数,如4SQ确实
  • 电话发送令牌PHP服务器在认证头(其种类哦认证是?)
  • 任何其他方式

非常感谢,并致以最良好的问候

+0

我忘了提及一些东西。服务器生成一个JSON输出并将其发送到客户端。任何时候都不涉及HTML/XML。 – jorgeas80 2012-04-26 15:31:44

回答

1

我认为最安全合理的方式将是一个HTTPS POST。当令牌是HTTPS请求中查询字符串的一部分时,它也被加密。但它会在服务器日志中显示明文,或者在使用浏览器时,它也可能出现在浏览器历史记录中。根据HTTP帮助程序库的不同,例如,当请求失败时,它也可以记录HTTPS URL。

在我看来,在Authentication头中发送令牌会很奇怪,因为它不用于服务器和客户端之间的认证。

+0

嗯......我明白你的观点,但我会把更多的上下文:我正在构建一个4SQ混搭。一个服务器代表用户与4SQ进行通信,并向iPhone/Android客户端提供REST API。当这些客户注册时,他们将他们的4SQ令牌发送到服务器。我如何发送此令牌? HTTP验证标头?你是对的:它不用于身份验证,只是“这是我的4SQ令牌,以我的名义使用它”。将它作为POST变量发送是更好还是更正确的方法? – jorgeas80 2012-04-28 21:24:42

+0

除此之外,我还有一个问题。我希望客户端发送给我的服务器的唯一身份验证相关事宜是4SQ令牌,当他们注册时。而已。我真的不想处理用户/密码问题。如果一个客户端向我的服务器发送一个有效的4SQ令牌,服务器会信任它。这是我的方法。采用这种方法,我需要每个客户端服务器请求中的4SQ令牌。我想根据4SQ令牌在我的服务器中生成第二个令牌,并使用它代替4SQ令牌。但我不知道使用哪种方法来生成第二个令牌,或者如果这在概念上是正确的... – jorgeas80 2012-04-28 21:37:04

+0

当您不需要为用户保存任何内容时,它可能是最好的解决方案来发送Foursquare令牌请求。否则,您可以为用户生成唯一的ID并将OAuth令牌与此ID一起保存(例如http://php.net/manual/de/function.uniqid.php)。在这种情况下,攻击者可能会滥用您的API并且不能直接访问您用户的Foursquare帐户。 – diewie 2012-05-02 13:19:48