2016-04-24 61 views
1

我正在为我的应用程序构建一个RESTful API,并且希望尽可能使其清晰透明。在HTTP GET查询参数中传递用户名和密码

我需要创建一个身份验证的端点,它最有意义我建立它,这样用户就可以在下面的方式进行身份验证:

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

正如我所说的,通过使用用户身份验证数据的HTTP GET方法在查询参数中对我来说似乎很干净。

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

回答

4

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

但是从另一方面来说,就服务器/客户端如何与URL一般工作而言,Query字符串的安全性较低。您可以阅读关于此herehere。简单地说,你应该担心存储在Web服务器日志以下

  • 网址
  • URL存储在浏览器历史
  • 网址是在来源标题
+0

他正在构建一个REST API;不是从最终用户的Web浏览器访问的东西,而是从另一个服务器调用。所以没有浏览器历史记录,也没有引用。 此外,构建API的人也应该能够调整服务器的日志设置,以便敏感数据不会被记录(例如https://stackoverflow.com/questions/9467405/is-it-possible-to-exclude-specified -get-参数合apache的存取日志/ 9473943#9473943)。无论如何,您应该考虑使用用户名和密码之外的这些东西,尤其是现在的数据隐私法。 – Arthur

0

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

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

+0

感谢您的答复过去了。在谈到REST的观点时,这种类型的请求应该返回认证数据,例如:'{“authToken”:“x7kkoal1vf4uk34ikzep”}'。重复提出请求可能会使所有以前的'authToken'无效,并用类似的JSON格式的数据进行响应。 –

0

那么我基本上传递base64字符串到服务器。 我的用户名和密码被转换为Base64,然后通过在认证头

Authorization : "Basic --Value" 

我觉得这是经过用户名和密码的服务器的最彻底的方法。

另一方面,服务器有一个名为Passport的模块。Passport提供了不同类型的授权和认证,如Basic,承载,令牌或甚至您自己的定制。

为了上述目的我使用基本模块。

+1

问题是“它实际上有多安全”。 'Authorization'头部基本上是纯文本。只有使用TLS才能保证安全。 – 2016-04-25 07:20:58

相关问题