前言

开发接近尾声了,这里展示一下部分设计细节

凭据种类与类型

总共设计有三种凭据,均为JWT凭据

第一方登录凭据

该凭据为评论系统本站使用的登录凭据,用于操作评论系统

登录模式评论凭据

在登录模式下,第三方网站中的Widget使用

匿名模式评论凭据

在匿名模式下,第三方网站中的Widget使用

凭据存储

三种凭据均存储于Cookie中,请求时由浏览器自动提交,并设置__Host-头,禁止子域写入

其中评论凭据采用CHIPS,以支持第三方Cookie嵌入。

评论提交

系统总共有两种模式:匿名模式和登录模式

这个是匿名模式评论提交时序图

sequenceDiagram
    autonumber
    participant U as 用户
    participant W as Widget
    participant CA as 匿名凭据端点
    participant CC as 评论端点

    U->>W: 填写昵称、邮箱、网址
    W->>CA: 请求匿名凭据
    CA-->>W: 返回评论凭据
    W->>CC: 携带评论凭据提交评论

这个是登录模式评论提交时序图

sequenceDiagram
    autonumber
    participant U as 用户
    participant W as Widget
    participant A as 授权页面
    participant T as 凭据交换端点
    participant C as 评论端点

    U->>W: 填写昵称、邮箱、网址
    W->>A: 附带邮箱参数跳转授权页面
    A-->>W: 授权后返回授权码
    W->>T: 使用授权码请求评论凭据
    T-->>W: 返回评论凭据
    W->>C: 携带评论凭据提交评论

登录方式

总共设计有四种登录方式

邮箱验证码

通过邮箱验证码进行无密码登录,未注册情况下自动完成注册。

一般来说推荐开启登录模式时采用该方式,兼顾安全与便利

Passkey

通过通行密钥进行无用户名,无密码登录

但是需要用户提前去评论系统网站注册Passkey才可用,便利程度与邮箱验证码相比较低,但是安全性最高。

密码

通过邮箱,密码进行登录,便利程度较低,安全性取决于密码复杂度

第三方登录

支持GitHub,Google,OIDC等第三方登录。

便利程度一般,安全性取决于第三方身份提供商。

另外如果邮箱已经被注册,则会禁止从未绑定的第三方登录进行登录。

需要进入评论系统手动绑定对应的第三方账户才可通过第三方登录进行登录。

Captcha支持

支持市面上常见的CloudFlare Turnstile、Google ReCaptcha、hcaptcha、Cap

Geetest后续考虑支持

后记

其实系统本身不复杂(迫真),有三到四天的时间全在调整架构,果然让AI从零开始写就喜欢乱搞架构

目前大部分架构已经确立完毕,现在正边打磨细节,边慢慢处理AI拉的屎。