我想创建一个灵活的API Rest服务器。我将允许客户端使用HTTP或APIKEY进行身份验证。REST GET请求,动词和apikey
我的问题是:什么是对apikey添加到GET请求的正确方法?我的问题是apikey污染了网址。
我想是这样的:/电子书/ 1/apikey/s4cr4t!
我想创建一个灵活的API Rest服务器。我将允许客户端使用HTTP或APIKEY进行身份验证。REST GET请求,动词和apikey
我的问题是:什么是对apikey添加到GET请求的正确方法?我的问题是apikey污染了网址。
我想是这样的:/电子书/ 1/apikey/s4cr4t!
在我看来,你应该只使用Authorization头。这就是它的原因。
把它的URL是一个坏主意,因为:
一)如你所说它污染的URL
b)如果您决定去SSL安全,则API仍将出现在日志文件中
c)缓存将最终创建相同表示的多个副本,每个api键一个。
有关创建您自己的授权方案的更多信息,请here。
对不起我的问题,但是这种方法不会暴露你的API密钥(使用开发人员工具)? – 2017-08-02 15:01:22
@JoshMonreal它的确如此。但是,在HTTP请求中确实没有可以完全保护客户机密的地方。目标是把它放在最不可能成为问题的地方。理想情况下,API密钥只能用于未经授权的使用易于检测并可以翻转的情况。 – 2017-08-04 13:58:13
证书可以使用Authorization
标头中传递:
GET http://domain.com:/book/1
Authorization: apikey="s4cr4t"
我相信你需要在授权标题中指定一个方案。例如Authorizaton:myapiauthscheme apikey =“s4cr4t” – 2011-03-17 11:21:37
是的,你实际上需要更多的东西,然后apikey,但这只是另一种方式的例子。 – 2011-03-17 18:27:52
这会怎样看待'$ http.get()'? – 2016-10-28 15:26:56
这一切都取决于你想要走多远,但是技师保持不变:
语境
的目标是安全的一些级别来识别客户端。 (注:安全性是另一个详细的讨论)。请记住,如果REST的“功能”是无状态的,那就意味着:除了资源之外,服务器上没有会话状态。为了保持客户端无状态,它需要在每个请求上提供足够的信息来表明请求是独立的。它必须为服务器提供一种识别客户端的方法,例如用户名/密码,API密钥或令牌。
你有不同的选项来做到这一点的,这里有:
添加HTTP标头识别客户端
在这里,人们可以使用认证头,并与每个请求发送。有各种认证方案,但坚持标准的,如Basic Auth。在这里你可能会坚持使用SSL。如果您愿意,身份验证过程会生成一种令牌。
您还可以使用一个Cookie的。 cookie必须包含任何信息除了它是你的服务器上的“指针或钥匙”有状态会话资源(注:会话它的资源,这是“休息法律”)。您可以通过响应200 OK或POST(+ info)执行PUT(+ info)创建此资源,响应为201 Created和Location:/ sessions/123334。会话然后可以由服务器,如超时,有效的客户端IP地址,API密钥等
上述的方法验证,您还可以定义一个客户头如API密钥:XXXX。但是,你只限于特殊的客户。 Set-Cookie是“众所周知的”标题,因此浏览器会透明地处理它们。然后可以通过以下链接并填写表单(PUT + POST)进行身份验证(创建会话资源)来完成身份验证过程。
编码的内容
这里的标识,你可以自由地做你想要什么了。只需在您的内容中添加一个字段/令牌/标识并让服务器验证它。
RESTful API通过解析链接来执行应用程序流。另请参阅HATEOAS和Fielding's words。这也适用于您有单独的登录应用程序的过程。
不要在URI中编码任何数据。 (带外信息)
如果您提及您(计划)使用的技术,将会有所帮助。 – gideon 2011-03-17 05:10:04
@giddy为什么技术很重要? – 2011-03-17 11:09:58
:)只是觉得他可以添加它..因为他的Q没有答案,评论几个小时。 – gideon 2011-03-17 11:49:13