客户端应该如何将facebook访问令牌传递给服务器?

zaf*_*s.m 31 authentication rest http oauth-2.0 facebook-access-token

在每次调用我的REST API时,我都要求客户端传递用户的facebook访问令牌,该令牌对用户进行身份验证.传递此令牌的最佳做法是什么?

  1. 也许作为HTTP问号背后的参数

    GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者以某种方式在请求的标题中,类似于HTTP基本认证

  3. 也许是第三种选择?(我已经排除了在JSON中传递它,因为我希望令牌也在GET调用中传递,所以JSON不适合我认为)

div*_*shm 40

如果您查看所有热门OAuth提供商(Google,Facebook,Pocket,Git等)提供的API端点,您会发现它们都有HTTPS端点.

您可以将访问令牌传递给提供者的方式是 -

i)作为查询参数 -

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

ii)在请求标题中 -

 GET /api/users/123/profile HTTP/1.1
 Host: yourwebsite.com
 Date: Tue, 14 May 2013 12:00:00 GMT
 Authorization: <YOUR_ACCESS_TOKEN>
Run Code Online (Sandbox Code Playgroud)

这两种方法通常由大多数API支持.你可以想到做同样的事情.

iii)Pocket API根本不使用GET.他们使用POST来处理所有请求,甚至是检索数据.查看此链接以查看其文档.请注意,他们使用POST来检索数据并传递JSON参数.

  • @KristoferKallsbo,我认为你误解了HTTPS的工作原理.URL的请求(包括查询字符串)不是以明文形式发送的.更多信息:http://stackoverflow.com/q/323200/99377 (20认同)
  • 建议不要在查询字符串中传递访问令牌!HTTPS仍以明文形式请求URL,包括查询字符串参数.只有标题和正文加密! (14认同)
  • @KristoferKallsbo查询字符串已加密 - http://stackoverflow.com/a/2629241/428724. (11认同)
  • @wezten OAuth2规范本身不建议通过URL和查询参数传递access_token.请参阅(最后一点| http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-16#section-4.3)>>"不要在页面URL中传递承载令牌:承载令牌不应该出现在页面URL中传递(例如作为查询字符串参数)." (5认同)
  • 好吧,一般的想法是包含令牌类型......如果您使用的是承载令牌类型,您可以拥有"授权:承载<YOUR_ACCESS_TOKEN>",这将告诉您的应用不要查找客户端凭据. (2认同)