大作业 - 5 身份验证

数据库

为了加入身份验证的功能,自然需要至少两个值来辨别身份。而两个值的对应关系可以使用加密或摘要算法进行验证,但是,更一般的是使用数据库进行存储。

就项目当前的规模而言, 我选择使用sqlite数据库,这是一个轻量级数据库,同时方便配置与迁移。而在python使用orm框架之后,对使用的数据库并不敏感,对于后期可能的数据库切换比较友好。

而在数据库中现有两张表,一个是用户表,用来存储用户名及密码。另一个是树莓派的表,用来储存设备id以及相应的识别码。

FPGA端验证

未加入身份验证的服务端存在这样一个问题,由于socket连接较为消耗服务器资源,所以在连入的socket较多的时候,可能会有潜在的安全问题。如有人恶意使用大量的客户端连入服务器占用资源等。

而为了解决这个情况,可以尝试着设置一个连接数上限,而当连接数大于这个数目的时候,服务器端自动切断恶意连接。自然,需要某种东西来验证连接是否为恶意连接。所以,需要数据库内部存储的关于FPGA的身份信息。

每当一个FPGA端连入时,首先服务器会将其丢入一个未验证身份的链表中,并保证这个链表的长度不超过某个预设的值。而在FPGA端发来验证身份的请求的同时,如果验证通过,则将其拿出链表并分配所需的位置。服务器端并不限制身份确定的连接数。

浏览器端验证

浏览器端的验证主要是用户身份的验证,即使用户名密码对应即可进行登录,同时用户可以进行自主注册。

管理员权限

目前为止,管理员的账户只能在后台进行添加。而在网页端,管理员账户能够对根据设备ID查询其身份识别码,或者添加某个设备ID。

你可能感兴趣的:(大作业 - 5 身份验证)