登录至 projectGDT 平台
RSA 密钥的生成与分发
服务端启动时,生成一个 RSA 密钥对
客户端发送 GET https://<daemon-host>/RSA-PublicKey
请求公钥;daemon 返回以 json 形式包装的 RSA 公钥。
玩家
玩家在网页端填写用户名 (UID 或 QQ 号) 和密码。
浏览器获取 RSA 公钥,将密码用该公钥加密。
浏览器发送请求,提交用户名和 RSA 加密后的密码,建立 WebSocket 连接。
daemon 将密码用私钥解密。
daemon 使用 PBKDF2 算法对解密后的用户密码取 hash,并与存储在数据库中的用户名、密码 hash 相比较,确定认证是否成功,若成功则接受并建立连接。
若连接成功建立,daemon 会向浏览器发送以 json 形式包装的
sessionKey
,该 key 在 WebSocket 连接存在期间有效。随后通过 HTTP 请求执行的任何查询和提交操作均需要该sessionKey
。若连接被拒绝,则一定是因为账户不存在或密码错误。
服务器
服务端插件从配置文件读取
token
。服务端插件获取 RSA 公钥,将
token
用该公钥加密。服务端插件发送请求,提交
token
,建立 WebSocket 连接。daemon 将
token
用私钥解密。daemon 将请求源 IP 与
token
与数据库中存储的数据相比较,确定认证是否成功,若成功则接受并建立连接。若连接成功建立,daemon 会向浏览器发送以 json 形式包装的
sessionKey
,该 key 在 WebSocket 连接存在期间有效。随后通过 HTTP 请求执行的任何查询和提交操作均需要该sessionKey
。若连接被拒绝,则一定是因为token
错误。
Last updated