【问题标题】:How should a client pass a facebook access token to the server?客户端应该如何将 facebook 访问令牌传递给服务器?
【发布时间】:2013-05-07 17:34:44
【问题描述】:

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

  1. 可能作为HTTP问号后面的参数

    GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML
    
  2. 或以某种方式在请求的标头中,类似于 HTTP 基本身份验证

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

【问题讨论】:

    标签: http rest authentication oauth-2.0 facebook-access-token


    【解决方案1】:

    如果您查看所有流行的 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>
    

    这两种方法通常被大多数 API 支持。您可以考虑这样做。

    iii) Pocket API 根本不使用 GET。他们使用 POST 处理所有请求,甚至用于检索数据。检查此link 以查看他们的文档。请注意,他们使用 POST 检索数据并传递 JSON 参数。

    【讨论】:

    • 嗯,一般的想法是包含令牌类型...如果您使用的是不记名令牌类型,您可以拥有 "Authorization : Bearer " ,这将告诉您的应用不要查找客户端凭据。
    • 不建议在查询字符串中传递访问令牌! HTTPS 仍以明文形式请求 URL,包括查询字符串参数。只有标题和正文被加密!
    • @KristoferKallsbo 查询字符串已加密 - stackoverflow.com/a/2629241/428724
    • @KristoferKallsbo,我认为您误解了 HTTPS 的工作原理。对 URL 的请求(包括查询字符串)不是以明文形式发送的。更多信息在这里:stackoverflow.com/q/323200/99377
    • @wezten OAuth2 规范,本身不建议通过 URL 和查询参数传递 access_token。请参阅(最后一点|tools.ietf.org/html/draft-ietf-oauth-v2-bearer-16#section-4.3)>>“不要在页面 URL 中传递不记名令牌:不应该在页面 URL 中传递不记名令牌(例如作为查询字符串参数)。”
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 2012-02-22
    • 1970-01-01
    • 2017-08-13
    • 2015-02-02
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多