通过HTTPS发送密码:GET与POST

时间:2017-07-27 13:40:34

标签: rest https

我正在创建一个无头API,它将驱动一个Angular前端。我在弄清楚如何处理用户身份验证方面遇到了一些麻烦。

显然,API应该通过SSL运行,但是即将出现的问题是我应该如何发送包含用户密码的请求:通过GET或POST。这是一个RESTFUL API,所以我正在做的是检索信息,这意味着它应该得到一个GET请求。但是将密码发送到get意味着它是URI的一部分,对吧?我知道即使GET请求也是通过HTTPS加密的,但这仍然是正确的方法吗?或者这是从RESTFUL中断并在正文中有数据的情况(GET请求可以在正文中有数据吗?)。

3 个答案:

答案 0 :(得分:3)

如果您在请求标头中传递凭据,则可以使用GET或POST请求。您可以选择使用已建立的授权标头和您选择的身份验证方案,也可以创建特定于API的自定义标头。

使用标头字段作为通信凭据的方式时,您无需担心写入访问日志的凭据,因为标头未包含在该日志中。使用标头字段也符合REST标准,并且实际上应该用于传递与资源请求/响应相关的任何元数据。此类元数据可包括但不限于以下信息:集合大小,分页详细信息或相关资源的位置。

总之,始终使用标题字段作为身份验证/授权的方式。

答案 1 :(得分:2)

主要是GET请求会绑定URL本身的数据...所以它比POST更加可冗。 所以如果是GET,那么就有可能活着HISTORY LOG

使用?user=myUsername&pass=MyPasswort与使用基于GET的表单完全相同,虽然可以包含Referer问题,但有关日志和历史记录的问题仍然存在。

通过GET发送任何类型的敏感数据都是危险的,即使它是HTTPS。这些数据可能最终出现在服务器的日志文件中,并将包含在Referer标题中,链接到或包含在其他方面。它们也将保存在浏览器的历史记录中,因此攻击者可能会尝试通过对历史的攻击来猜测和验证链接的原始内容。

答案 2 :(得分:0)

您也可以发送带有get请求的数据正文,但我猜这并不支持所有库。

最好使用 POST 或请求标头。查看其他API以及它们如何处理它。

但您仍然可以使用 GET 进行基本身份验证,例如:http://restcookbook.com/Basics/loggingin/