通过HTTPS发送密码:GET与POST

问题描述:

我正在创建一个无头API来驱动Angular前端。我在处理用户身份验证时遇到了一些麻烦。通过HTTPS发送密码:GET与POST

很明显,API应该通过SSL运行,但是问题在于如何发送包含用户密码的请求:通过GET或POST。这是一个RESTFUL API,所以我在做的是检索信息,这意味着它应该得到一个GET请求。但是通过get方式发送密码意味着它是URI的一部分,对吧?我知道甚至GET请求都是通过HTTPS加密的,但这仍然是正确的方法吗?或者这是一个从RESTFUL中解脱出来并将数据放入正文或某些内容(GET请求可以在正文中包含数据的情况?)。

如果您在请求标头中传递凭据,那么您将无论是GET请求还是POST请求。您可以选择使用已建立的授权标头并选择认证方案,也可以创建特定于您的API的自定义标头。

当使用头字段作为通信证书的一种方式时,不需要担心写入访问日志的凭证,因为头文件不包含在该日志中。使用头字段也符合REST标准,并且实际上应该用于传递与资源请求/响应相关的任何元数据。这样的元数据可以包括但不限于诸如以下的信息:收藏大小,分页细节或相关资源的位置。

总之,总是使用头字段作为认证/授权的手段。

+0

有趣。按照预期,我在传递我的JWT时使用'Authorization'标头,但我没有意识到将它用于初始认证也是标准的。 – RhoVisions

你也可以发送一个带有获取请求的数据体,但是这并不是我猜想的所有库都支持的。

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

但你仍然可以使用GET基本身份验证喜欢这里:http://restcookbook.com/Basics/loggingin/

+0

在这种情况下如何更好地打破REST? – RhoVisions

+1

我更新了我的答案。我认为这并不重要。在这种情况下,我不觉得你会打破REST。这是一个灰色地带:)但你可以使用基本认证,但 – lumio

+0

POST不一定更好。这将取决于对资源采取的行动。 –

大多GET请求将在URL中数据绑定...所以它比POST更redable .. 所以如果是GET ,有可能给活着的历史记录

使用?user=myUsername&pass=MyPasswort是完全一样使用基于GET形式,而Referer的问题能够得到遏制,有关日志和历史的问题依然存在。

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

+0

即使浏览器是AJAX的GET请求,浏览器也会保存数据吗? – RhoVisions

+1

在GET请求的URL中发送敏感数据是很危险的,但是这只是因为URL如前所述记录在服务器上。但是,只要您通过HTTPS进行通信,就可以在GET请求的标头字段中发送敏感数据。 –