account-server/README.md

68 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2024-02-21 20:46:15 +08:00
# SouthBay Accounts
南湾用户登录服务。
2024-02-29 12:58:16 +08:00
## 编译
在运行服务端的服务器上生成密钥对,并把私钥命名为`id_rsa`放在`src/`中后编译。
运行`cargo build --release`编译。
2024-02-21 20:46:15 +08:00
## 登录流程
用户只能每3秒发送一次登录请求。每3秒发送超过30次登录请求视为攻击行为禁止请求的ip`3600`秒。
客户端依次发送以下三个请求。
每个请求都先发送一个字节表示请求编号。
* 编号1`prelogin`客户端向服务端请求tcp连接并发送私钥加密的`southbayhub login:{id}`
服务端回复一个公钥加密的`southbayhub server`、`already logged`或`unexist`,连接断开。
服务端账户由`unlinked`状态进入`logining`状态10秒超过10秒视为登录失败。
客户端通过解密字符串验证服务端的有效性,并选择停止登录或继续登录。
* 编号2`login`客户端向服务端请求tcp连接并发送私钥加密的`{id}|{passwd}`
服务端根据是否超时以及账号和密码的正确性回复公钥加密的`unprelogged`、`logged in`、
`passwd incorrect`,连接断开。
服务端账户进入`logged`状态60秒超过60秒进入`nonavailable`状态。
* 编号3`heartbeat`客户端向服务端请求tcp连接并发送私钥加密的`{id}`后服务端的`logged`状态计时归零,
处于`unavailable`状态的换回`logged`状态并将计时归零。处于其它状态的什么都不做。
* 编号4`logout`客户端向服务端请求tcp连接并发送私钥加密的`{id}`。所有的用户数据项重新写回数据库。
## 数据库
使用`sqlite3`。
### 用户数据项
项目|说明
:-:|:-
`id`|用户唯一标识符用户名的md5前8字节。
`name`|用户名,不可以更改。
`passwd`|用户密码的sha512值字符串的md5值客户端应发送sha512数据表应存储sha512值的md5值16进制字符串。
`email`|用户邮箱。
`avatar`|用户头像。一个服务端资源id。
```sql
CREATE TABLE users (
id BIGINT PRIMARY KEY,
name VARCHAR(128),
passwd CHAR(32),
email TEXT,
avatar INT
);
```
### 资源数据项
项目|说明
:-:|:-
`id`|资源id
`path`|资源路径
```sql
CREATE TABLE resource (
id INT PRIMARY KEY,
path TEXT
);
```