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

ejabberd 21.07配置JWT认证触发崩溃报错问题求助

问题根因

你遇到的崩溃不是JWT配置错误导致的,核心错误来自日志里的function not exported, [{crypto,hmac, [...], []}]:
Arch发行版滚动更新的Erlang运行时版本过高(≥24.x),移除了旧版的crypto:hmac/3接口,而你安装的ejabberd 21.07依赖的jose库仍然调用这个已废弃的接口,导致校验JWT签名时直接崩溃。

解决方案

优先选择以下任意一种方案修复依赖兼容问题:

  • 升级ejabberd到22.05及以上版本,该版本已经完成了Erlang ≥24版本的接口适配,修复了hmac调用兼容问题
  • 若要保留当前ejabberd版本,将系统Erlang运行时降级到23.x版本,匹配ejabberd 21.07的官方依赖要求
  • 直接使用ejabberd官方提供的预编译二进制包或容器镜像,自带匹配的依赖运行环境,不会出现系统库版本冲突

依赖修复后配置校验项

依赖问题解决后,可按以下要求核对JWT配置,避免配置类错误:

  1. 配置文件中要明确指定auth_method: jwt,同时配置jwt_jwk_path指向你的JWK文件绝对路径,确保ejabberd运行用户对该文件有读权限
  2. 生成JWT时需满足要求:
    • 签名算法固定为HS256
    • payload必须携带jid字段,值为完整的Jabber ID(格式:用户名@你的服务域名)
    • 签名密钥使用JWK中k值的base64url解码后的原始二进制值,不要额外转码
  3. 客户端认证时,用户名字段填JWT中jid对应的用户名,密码字段填完整的JWT字符串即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:36:03