ejabberd 中的 JWT 身份验证

JWT auth in ejabberd

我已按照此文档 ejabberd authentication 配置了 ejabberd 服务以使用 jwt 令牌对用户进行身份验证。在 ejabberd.yml 文件中,我配置了如下的身份验证机制

`auth_method: [jwt, sql]
 jwt_key: /usr/local/etc/ejabberd/secret.jwk
  default_db: sql
 new_sql_schema: true
 sql_type: mysql


 access_rules:
   jwt_only:
     deny: admin
     allow: all
   local:
     allow: all
   c2s:
     deny: blocked
     allow: all
   announce:
     allow: admin
   configure:
     allow: admin
   muc_create:
     allow: all
   pubsub_createnode:
     allow: local
   trusted_network:
     allow: loopback

  jwt_auth_only_rule: jwt_only

`

。为来自 jwt.io and passed that token as a password while connecting to ejabberd through strophe.connect() as stated in this doc 的用户创建了 jwt 令牌。但是这个日志

的身份验证仍然失败
 Send XML on stream = <<"<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/><text xml:lang='en'>Invalid username or password</text></failure>">>

有没有人遇到过这个问题并设法解决了这个问题?

TIA!

对于遇到此问题的任何人,我能够使用具有以下配置的 jwt 令牌进行身份验证

使用“k”签署 JWT,放置密钥集 `

"keys": [
    {
        "kty": "oct",
        "use": "sig",
        "kid": "",
        "k": "",
        "alg": "HS256"
    }
]

` 在 secret.jwk 中。在 strophe.connect() 中传递 jabber id 和 jwt 令牌后,它就连接了。 这是我的后端配置

      `auth_method: [jwt, sql]
       jwt_key: /usr/local/etc/ejabberd/secret.jwk
       default_db: sql
       new_sql_schema: true
       sql_type: mysql

       access_rules:
       jwt_only:
        deny: admin
        allow: all
       local:
        allow: all
       c2s:
         deny: blocked
         allow: all
       announce:
         allow: admin
      configure:
        allow: admin
      muc_create:
        allow: all
      pubsub_createnode:
       allow: local
      trusted_network:
       allow: loopback

     jwt_auth_only_rule: jwt_only`