2013-05-13 79 views
29

在对我的REST API的每次调用中,我都要求客户端传递用户的Facebook访问令牌,这会对用户进行身份验证。传递此令牌的最佳做法是什么?客户端应该如何将Facebook访问令牌传递给服务器?

  1. 也许作为HTTP问号

    GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML 
    
  2. 在请求的首标

    或以某种方式,后面的参数类似于HTTP基本认证

  3. 也许第三种选择? (我已经排除通过它的JSON,因为我需要令牌获得GET调用传递一样,所以JSON将不适合那里,我认为)

回答

37

如果你看一下所有流行的提供的API端点OAuth提供商(Google,Facebook,Pocket,Git等),你会发现他们都拥有HTTPS端点。

,可以在其中通过访问令牌到提供的方式是 -

ⅰ)作为查询参数 -

https://yourwebsite.com/api/endpoint?access_token=YOUR_ACCESS_TOKEN

ⅱ)在请求头 -

GET /api/users/123/profile HTTP/1.1 
Host: yourwebsite.com 
Date: Tue, 14 May 2013 12:00:00 GMT 
Authorization: <YOUR_ACCESS_TOKEN> 

这两种方法通常受到大多数API的支持。你可以考虑做同样的事情。

III)袖珍API不使用GET可言。他们对所有请求使用POST,即使是检索数据。查看这个link查看他们的文档。请注意,他们使用POST来检索数据并传递JSON参数。

+0

是的,我正在使用HTTPS。选项(i)和(ii)对我来说也可以,我不会去选项(iii)。在(ii)中,我是否应该包含* Basic *这个词或其他的东西来表明我需要那个令牌? – 2013-05-14 09:32:29

+2

那么,一般的想法是包括令牌类型......如果您使用的是无记名令牌类型,则可以拥有“授权:持有者”,这会告诉您的应用程序不寻找客户端凭证。 – divyanshm 2013-05-14 10:57:30

+13

不推荐在查询字符串中传递访问令牌! HTTPS仍然以明文形式请求URL(包括查询字符串参数)。只有标题和正文被加密! – 2014-02-21 01:26:57

相关问题