长期文,最近更新于:2025-09-02

不过我觉得下次更新大概会写篇新的,再说吧

现状

最近尝试让身边的更多人使用自部署的Matrix服务器,但Matrix服务器面向公众的注册机制只能在完全开放注册和完全关闭注册之间选择。而让公众都通过管理员注册不太现实,并且容易泄露密码隐私

有不少思路可以实现可控制的注册,例如

  • token-based:管理员发放管理员管理的注册密钥
  • 邀请制:用户生成的注册密钥
  • 白名单:只允许特定的邮箱/用户名注册

好消息是Matrix 提案 MSC3231token-based register已经被提出,并且在SynapseDendrite中均有不同程度的实现和准备。但是目前为止这两个服务端均还不能正式使用这个功能(均停留在了增加了管理员API但是没有用户接口的进度)

本人只用过Dendrite,对Synapse了解不深,若信息有误或过时请指正

尽管没有token-based的原生支持,我们还是可以利用SynapseDendrite均支持的Shared-Secret Registration(相关文档:Synapse Dendrite)来外包注册服务。

可以参见Matrix提案 MSC3231#alternatives

下文介绍Matrix-Registration

Matrix-Registration

这是一个相对独立的实现生成和使用token,并允许用户自行使用可用token注册的小型web程序。这个程序和Matrix主服务器间只有Shared-Secret Registration接口的沟通。

部署相当简单,pip安装,配置中填好matrix服务器的地址(直接填地址不要填well-known)和注册secret,然后matrix-registration generate生成token,matrix-registration serve部署页面,挂证书反代即可。

我在用时发现它默认读的配置是config.sample.yaml而非config.yaml,仅供参考

My fork

https://github.com/dedfaf/matrix-registration

如果你有兴趣,可以参考我fork的版本,添加了以下功能:

  • 默认生成复杂的非可读token
  • matrix-registration generate命令生成注册链接
  • 可以在配置中自定义的默认使用次数和过期时间
  • matrix-registraion status -v命令来详细展开各token的状态
  • 允许在CLI中删除token
  • 注册成功时向用户和管理员发送Server notice(需要配置admin access token)
  • Fix 不显示简中翻译

但这个版本是用于自部署的,部分配置和原版有很大不同,新功能也没写单元测试。你可以参考我的几条branch和提交来修改(毕竟这玩意我提了PR也没人理,估计没人需要正式版本)

部署自己的版本的方法:克隆仓库,创建虚拟环境,修改后pip install -e .,具体命令取决于虚拟环境方法。