在HTTP GET查询参数中传递用户名和密码

时间:2016-04-24 06:26:29

标签: rest http authentication query-parameters

我正在为我的应用程序构建RESTful API,我希望尽可能保持干净透明。

我需要创建一个身份验证端点,我最有意义的是构建它,以便用户可以通过以下方式进行身份验证:

GET https://example.com/
    auth?identity=<username_or_email>&password=<password>

正如我所说,在查询参数中使用HTTP GET方法传递用户身份验证数据对我来说似乎非常干净。

但我想请问一下它实际上有多安全。考虑到它将通过SSL / TLS加密,您认为传输这样的用户凭据是个好主意吗?

3 个答案:

答案 0 :(得分:7)

作为显示名称 said,两种变体基本上都是纯文本(即使使用base64编码)。因此,您必须使用TLS或其他保护措施,例如HMAC

但从另一方面来说,就服务器/客户端如何使用URL而言,查询字符串的安全性较低。您可以阅读有关此herehere的信息。简而言之,您应该担心以下

  • 网址存储在网络服务器日志中
  • 网址存储在浏览器历史记录中
  • 网址在Referrer标头中传递

答案 1 :(得分:1)

我基本上将base64字符串传递给服务器。 我的用户名和密码在base64中转换,然后在授权标题中传递

Authorization : "Basic --Value"

我发现这是将用户名和密码传递给服务器的最简洁方法。

另一方面,服务器有一个名为passport的模块.Passport提供不同类型的授权和身份验证,如Basic,bearer,token甚至是你自己的自定义。

出于上述目的,我使用基本模块。

答案 2 :(得分:0)

从安全的角度来看,如果您将凭据作为查询参数或Authentication标头传递,则无关紧要。两者基本上都是纯文本。所以你必须使用TLS。

从REST的角度来看,您的网址看起来像RPC:您调用的方法auth接受两个参数identitypassword。此URL表示的REST资源是什么?如果您使用相同参数发出第二个GET请求会发生什么?回答是什么?