访问令牌在成功登录时应该放在哪里?

时间:2016-02-19 16:43:55

标签: api rest

我正在计划一个API,但我没有找到任何有关访问令牌应放在答案中的位置的信息。我对我提供访问令牌的情况感兴趣。将令牌发送到客户端(从后端/服务器)的做法是什么? 它应该发送给标题中的客户还是正文的答案? 谢谢你的回答!

1 个答案:

答案 0 :(得分:2)

你应该看看例子,看看别人做了什么。例如,Facebook,Twitter,Google,亚马逊......以及暴露REST API的所有流行PaaS服务都使用OAuth2作为身份验证机制:

在OAuth2中,您将看到规范要求将生成的令牌发送到json响应正文中的客户端:http://tools.ietf.org/html/rfc6749#section-5。但您也可以看到Google和其他供应商如何扩展此机制,以便将其作为回调网址参数发送(例如,查看https://developers.google.com/identity/protocols/OAuth2UserAgent)。

获得授权令牌后,将其放在您发送的访问受保护资源请求的Authorization: HTTP标头上。他们必须支持这种方式,因为它是OAuth2标准指定它的方式https://tools.ietf.org/html/rfc6749#section-7

如果你想用oauth修补一下,请查看https://developers.google.com/oauthplayground

(OAuth几乎是一回事。)

它们通常还会扩展Authorization标头机制,以允许令牌分别作为响应的url或主体中的GET / POST参数提供(例如,Facebook的Graph API也支持passing an access_token= parameter on your HTTP POST request body or GET URI) 。在javascript浏览器应用程序上无法操作甚至读取HTTP标头,因此提供此功能可以使许多应用程序开发人员的工作更轻松。

另一种流行的身份验证方案是SOAP身份验证。它不支持令牌,但它支持摘要身份验证,这是类似的事情。其中有趣的部分是它不是基于HTTP / Web的(尽管它主要以这种方式使用),因此您可以将其用于其他应用程序协议。这有点麻烦,但你可以找到服务器和客户端的现成实现。

您也可以在没有SOAP的情况下使用digest authentication over HTTP。它也基于Authorization:标题和every browser supports it。查看https://en.wikipedia.org/wiki/Digest_access_authentication,了解授权标头是如何以不同方式形成的,具体取决于您希望达到的安全级别。

某些服务(如redmine)允许您使用API​​令牌(API密钥)而不是会话令牌。然后,您可以对http://whatever:yourapikey@example.com/protectedMethod之类的请求进行基本的http自动调整。在这种情况下,客户端可以让服务器使用Web界面或rest api生成api密钥(因此生成的密钥将作为JSON响应传递)。不过,这种方法可能不是一个好主意:如果你想知道原因,请检查http://talks.codegram.com/http-authentication-methods#/intro,还有这个问题讨论把它放在哪里:Where should I place API keys in REST api calls?