我正在为我的应用程序构建RESTful API,我希望尽可能保持干净透明。
我需要创建一个身份验证端点,我最有意义的是构建它,以便用户可以通过以下方式进行身份验证:
GET https://example.com/
auth?identity=<username_or_email>&password=<password>
正如我所说,在查询参数中使用HTTP GET方法传递用户身份验证数据对我来说似乎非常干净。
但我想请问一下它实际上有多安全。考虑到它将通过SSL / TLS加密,您认为传输这样的用户凭据是个好主意吗?
答案 0 :(得分:7)
作为显示名称 said,两种变体基本上都是纯文本(即使使用base64编码)。因此,您必须使用TLS或其他保护措施,例如HMAC
但从另一方面来说,就服务器/客户端如何使用URL而言,查询字符串的安全性较低。您可以阅读有关此here或here的信息。简而言之,您应该担心以下
答案 1 :(得分:1)
我基本上将base64字符串传递给服务器。 我的用户名和密码在base64中转换,然后在授权标题中传递
Authorization : "Basic --Value"
我发现这是将用户名和密码传递给服务器的最简洁方法。
另一方面,服务器有一个名为passport的模块.Passport提供不同类型的授权和身份验证,如Basic,bearer,token甚至是你自己的自定义。
出于上述目的,我使用基本模块。
答案 2 :(得分:0)
从安全的角度来看,如果您将凭据作为查询参数或Authentication
标头传递,则无关紧要。两者基本上都是纯文本。所以你必须使用TLS。
从REST的角度来看,您的网址看起来像RPC:您调用的方法auth
接受两个参数identity
和password
。此URL表示的REST资源是什么?如果您使用相同参数发出第二个GET
请求会发生什么?回答是什么?