Секрет JWT для использования с ejabberd?

Я следую этим:

и создали секретный ключ, как показано ниже, используя https://mkjwk.org/, чтобы соответствовать примеру в первом URL выше:

тип ключа Oct

Согласно https://auth0.com/blog/navigating-rs256-and-jwks/ потому что это тип HS:

«Проще говоря, HS256 должен делиться секретом с любым клиентом или API, который хочет проверить JWT».

Поэтому я наивно предполагал использовать «k» в качестве секрета для подписи JWT на сервере, выдающем JWT для использования в поле пароля любого клиента XMPP (stanza.io и pidgin на рабочем столе).

Что я неправильно понимаю? Я подтвердил, что ejabberd запускается правильно (через ejabberdctl live и loglevel 4):

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

и что я все еще могу аутентифицироваться с помощью пароля на нашем сервере каталогов, но не могу с помощью JWT. Я не думаю, что генерирую его правильно, потому что я просто подписываю его как обычный общий ключ JWT.

Спасибо, Гэвин.


person Gavin Henry    schedule 28.04.2020    source источник
comment
Кто-нибудь создал JWT, используя общий секрет внутри JWK? На любом языке, на котором они могут указать мне некоторые документы? Не заморачивался на каком языке :-)   -  person Gavin Henry    schedule 30.04.2020


Ответы (2)


Я смог пройти аутентификацию с помощью токена jwt, подписал JWT с помощью k, поместил набор ключей `

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

` в тайне.jwk. И после передачи идентификатора jabber и токена jwt в strophe.connect() он подключился. это конфигурация бэкэнда, которая у меня была

      `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`
person AD95    schedule 07.09.2020
comment
вы имеете в виду, что k и kid должны быть пустыми все время, или мне нужно заменить их своим контентом? Я использовал ваш и сгенерировал токен, но не работал со мной. - person vavadiya hiren; 18.01.2021
comment
Мой ключевым внешний вид файлов, как ниже {KTY: октябрь, использование: сиг, к: XckBSF7uaA5fTR4JK1QkLaguwh9MO70__kd3s8lPTWaVmbOLPE8JBIG1yPs3in9YSJER2QdxjerNaLT_6OhmX2JnB_zeUz1m7EN-ThtbKXUjwauUMoT4PE_fyuqPQMvW-rsAkBjkz0MM_rKm30IxNN3oeXdhEIhMHlVXNumMwzcG7rctUHuFZmxsNKB1CJhTgRSJA7u4Ol0Fm07KA9E4glwK-XdeYza0nMuv3CC8P72i_1eCwBs2UXRyj4VnRrdjZflY0IomZ7iDowdldJwx-WVN51xhtda8dlNMa-p_TJrKjNhBG6f_5afNWzLB9hYJ5-AZcMksZRPgafAvUAOiyw, ALG: HS256} Может ли тело помочь мне, чтобы генерировать маркер и я могу войти в мой ejabbred ? - person vavadiya hiren; 18.01.2021

«k» — это секрет, используемый для подписи создаваемых вами JWT, как вы правильно поняли.

Однако https://mkjwk.org (и jabber) используют закодированные секреты Base64-url (RFC 4648 §5). Пожалуйста, попробуйте расшифровать значение «k» перед тем, как подписывать свой JWT, поскольку любые другие библиотеки (и алгоритмы) обычно не ожидают закодированного секрета, особенно секрета в кодировке URL.

Вы можете проверить https://jwt.io/, чтобы вручную создать или изменить свои JWT и посмотреть, что происходит. с ними, с возможностью кодирования секрета или нет. Однако он прозрачно обрабатывает кодировку base64-url.

person Panter4    schedule 28.05.2020
comment
{Ключи: [{KTY: октябрь, использование: сиг, малыш: тестирование, к: 0_9uMKBuLT3EmKEqOuFG5Srl9TD1RCw44pgSPeT9qykpTGdQWQi5AnIqxevfIccpr-A_J08D2t0lf1tAK-LRLCbWeewfPptqHS_HxwaeQIcSwO6IP2POIRzc28Z9XftuR7zk-T63C0ZtWyUvAdm0S3LitCjUdFAnacWQItLc9oswUjWt4w2l5tW-Kcp495lWK9SbovAofO5kgqqDkMZqQyQtbRUAI6EjHJDu0XWAap7ib55Bj19D902nzUWOPsin3LcWO0_FgbcHYomCbo7YXB7kUkWR3lVgAUisYbeQ9HXGkGqdvoRlH7XLhRU0TfzS3TstynA8xbCj66ew9ebzTA, ALG: HS256}]} - person Gavin Henry; 31.05.2020
comment
Это JSON, но это значение k не декодируется в ascii. Должен ли? - person Gavin Henry; 31.05.2020
comment
Нет, ключ двоичный, случайные 512 бит (или любой выбранной вами длины) не будут декодироваться во что-либо читаемое. - person Panter4; 01.06.2020
comment
Спасибо @Panter4, вы спасли мой день!! Декодирование (base64-decode) k перед его использованием для генерации моих токенов заставило его работать. Я не знал, что эти инструменты всегда генерируют токены в кодировке base64, и поэтому мне приходилось декодировать их перед подписанием. - person Emilio; 12.02.2021