【问题标题】:JWT secret to use with ejabberd?与 ejabberd 一起使用的 JWT 秘密?
【发布时间】:2020-08-12 21:18:30
【问题描述】:

我正在关注这些:

并使用https://mkjwk.org/ 创建了一个如下所示的secret.key 以匹配上面第一个URL 中的示例:

根据https://auth0.com/blog/navigating-rs256-and-jwks/,因为这是HS类型:

“简单地说,HS256 必须与任何客户端或 API 共享一个秘密 想要验证 JWT”

所以我天真地假设在服务器上使用“k”作为密钥来签署 JWT,以便在任何 XMPP 客户端(桌面上的 stanza.io 和 pidgin)的密码字段中使用 JWT。

我误会了什么?我已经确认 ejabberd 正确启动(通过 ejabberdctl live 和 loglevel 4):

auth_method: [jwt, ldap]
jwt_key: /opt/ejabberd/conf/secret.jwk

并且我仍然可以在我们的目录服务器中使用密码进行身份验证,但我不能使用 JWT。我认为我没有正确生成它,因为我只是像普通共享密钥 JWT 一样对其进行签名。

谢谢, 加文。

【问题讨论】:

  • 有没有人使用 JWK 中的共享密钥生成 JWT?他们可以用任何语言向我指出一些文档?不关心它是什么语言:-)

标签: jwt ejabberd jwk ejabberd-auth


【解决方案1】:

“k”是用于签署您生成的 JWT 的密钥,您认为是正确的。

但是 https://mkjwk.org(和 jabber)使用 Base64-url (RFC 4648 §5) 编码的秘密。 请在签署您的 JWT 之前尝试解码“k”的值,因为任何其他库(和算法)通常不需要编码的秘密,尤其是 url 编码的秘密

您可以查看https://jwt.io/ 来手动创建或修改您的 JWT,看看它们发生了什么,并可选择是否对密码进行编码。然而,它透明地处理 base64-url 编码。

【讨论】:

  • { “钥匙”:[{ “KTY”: “辛”, “使用”: “SIG”, “孩子”: “测试”, “K”:“0_9uMKBuLT3EmKEqOuFG5Srl9TD1RCw44pgSPeT9qykpTGdQWQi5AnIqxevfIccpr-A_J08D2t0lf1tAK-LRLCbWeewfPptqHS_HxwaeQIcSwO6IP2POIRzc28Z9XftuR7zk- T63C0ZtWyUvAdm0S3LitCjUdFAnacWQItLc9oswUjWt4w2l5tW-Kcp495lWK9SbovAofO5kgqqDkMZqQyQtbRUAI6EjHJDu0XWAap7ib55Bj19D902nzUWOPsin3LcWO0_FgbcHYomCbo7YXB7kUkWR3lVgAUisYbeQ9HXGkGqdvoRlH7XLhRU0TfzS3TstynA8xbCj66ew9ebzTA”, “ALG”: “HS256”}]} 跨度>
  • 是 JSON,但 k 值不会解码为 ascii。应该吗?
  • 不,密钥是二进制的,随机 512 位(或您选择的任何长度)不会解码为任何可读的内容。
  • 谢谢@Panter4,你拯救了我的一天!!在使用它生成我的令牌之前解码(base64-decode)“k”使其工作。我不知道这些工具总是生成 base64 编码的令牌,因此我必须在签名之前进行解码。
【解决方案2】:

我能够使用 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`

【讨论】:

  • 你的意思是k和kid应该一直是空白的还是我需要用我的内容替换它?我使用了你的并生成了一个令牌,但没有和我一起工作。
  • 我的密钥文件看起来像下面{ “KTY”: “辛”, “使用”: “SIG”, “K”: “XckBSF7uaA5fTR4JK1QkLaguwh9MO70__kd3s8lPTWaVmbOLPE8JBIG1yPs3in9YSJER2QdxjerNaLT_6OhmX2JnB_zeUz1m7EN-ThtbKXUjwauUMoT4PE_fyuqPQMvW-rsAkBjkz0MM_rKm30IxNN3oeXdhEIhMHlVXNumMwzcG7rctUHuFZmxsNKB1CJhTgRSJA7u4Ol0Fm07KA9E4glwK-XdeYza0nMuv3CC8P72i_1eCwBs2UXRyj4VnRrdjZflY0IomZ7iDowdldJwx-WVN51xhtda8dlNMa-p_TJrKjNhBG6f_5afNWzLB9hYJ5-AZcMksZRPgafAvUAOiyw” , "alg": "HS256" } 任何机构都可以帮助我生成令牌,我可以登录到我的 ejabbred 吗?
猜你喜欢
  • 2019-11-14
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2020-07-08
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多