如何安全地向REST服务发送密码?

Hou*_*man 9 python rest flask flask-restful

我正在使用Flask-Restful来构建REST服务.然后,iOS设备将连接到此REST后端以同步本地数据.

该服务将通过https连接访问.

REST服务是无状态的,用户必须对每个请求进行身份验证.因此,用户名和密码将以明文格式发送到REST服务.后端将散列密码并检查数据库中的现有散列密码.

api.add_resource(Records, '/rest/records/<string:email>/<string:password>/<string:ios_sync_timestamp>')
Run Code Online (Sandbox Code Playgroud)

现在我用这种方法看到的一个问题是用户名和密码是清晰的格式,作为GET网址的一部分.服务器日志显然会跟踪这个.现在,如果我的后端被黑客入侵,日志文件将损害所有用户名和密码.

这是什么最好的解决方案?我想也许可以发送用户名和密码作为POST参数,但是如何使用GET请求呢?

class Records(Resource):
    def get(self, email, password, ios_sync_timestamp):
        pass
    def post(self, email, password, ios_sync_timestamp):
        pass
Run Code Online (Sandbox Code Playgroud)

San*_*nda 4

要使用您想要的用户名和密码对每个请求进行身份验证,您应该使用:基本身份验证

使用它非常简单,并且适用于所有 HTTP 方法(GET、POST...)。您只需要在请求中添加 HTTP 标头:

Authorization: Basic <...>
Run Code Online (Sandbox Code Playgroud)

<...>部分username:password以 base64 编码。

例如,如果您的登录名是foo,密码是bar。HTTP 标头应包含以下行:

`Authorization: Basic Zm9vOmJhcg==`
Run Code Online (Sandbox Code Playgroud)

通过您的HTTPS连接,它是安全的。

编辑:使用 Flask,您可以使用Flask HTTP 身份验证来“自动”实现此目的。

  • 此外,请查看 http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful - 名为“Authentication”的部分 (2认同)