You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用simplematrixbotlib通过access token登录Matrix服务器失败求助

问题

使用simplematrixbotlib开发机器人时,密码认证方式完全正常:

import simplematrixbotlib as botlib

creds = botlib.Creds(
    homeserver="https://example.org",
    username="username",
    password="password",
    session_stored_file="session.txt"
    )
bot = botlib.Bot(creds)
bot.run()

但改用access token认证时,代码如下:

...
creds = botlib.Creds(
    homeserver="https://example.org",
    username="username",
    access_token="syt_c2...DTJ",
    session_stored_file="session.txt"
    )
...

出现以下错误:

Traceback (most recent call last):
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/fernet.py", line 127, in _verify_signature
    h.verify(data[-32:])
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/hmac.py", line 72, in verify
    ctx.verify(signature)
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/hmac.py", line 85, in verify
    raise InvalidSignature("Signature did not match digest.")
cryptography.exceptions.InvalidSignature: Signature did not match digest.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shaman/simple-bot/main.py", line 498, in <module>
    bot.run()
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/simplematrixbotlib/bot.py", line 84, in run
    asyncio.run(self.main())
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/simplematrixbotlib/bot.py", line 43, in main
    self.creds.session_read_file()
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/simplematrixbotlib/auth.py", line 89, in session_read_file
    decrypted_session_data = fw.decrypt(
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/fernet_wrapper/__init__.py", line 37, in decrypt
    data = str(f.decrypt(token))
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/fernet.py", line 88, in decrypt
    return self._decrypt_data(data, timestamp, time_info)
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/fernet.py", line 145, in _decrypt_data
    self._verify_signature(data)
  File "/home/shaman/simple-bot/venv/lib/python3.10/site-packages/cryptography/fernet.py", line 129, in _verify_signature
    raise InvalidToken
cryptography.fernet.InvalidToken

已确认access token有效(浏览器中可正常使用),且严格遵循官方文档操作,仍无法正常登录,问题出在哪里?

解决方案

问题根源在于之前密码认证生成的session.txt文件与access token认证不兼容。当使用密码登录时,库会用基于密码的密钥加密会话数据并写入session.txt;而改用access token时,库尝试读取该文件,但加密密钥不匹配,导致解密失败抛出InvalidToken错误。

解决步骤:

  1. 删除之前生成的session.txt文件,避免旧的加密会话数据干扰。
  2. 修改代码,确保access_token参数正确,若不需要会话持久化可直接移除session_stored_file参数;若需要保留,库会基于access token重新生成合法的会话文件。

修改后的示例代码:

import simplematrixbotlib as botlib

creds = botlib.Creds(
    homeserver="https://example.org",
    username="username",
    access_token="syt_c2...DTJ"
    # 可选:如果需要会话持久化,保留session_stored_file,库会自动生成新文件
    # session_stored_file="new_session.txt"
)
bot = botlib.Bot(creds)
bot.run()

验证:运行修改后的代码,若保留session_stored_file,会生成新的会话文件,不会再出现解密错误。

内容的提问来源于stack exchange,提问作者Dmitry Kopylov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:52