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

根据https://auth0.com/blog/navigating-rs256-and-jwks/的说法,这是一种HS类型:
“简单地说,HS256必须与任何希望验证JWT的客户端或API共享一个秘密”。
因此,我天真地假设使用"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一样对它进行签名。
谢谢加文。
发布于 2020-09-07 15:11:44
我能够使用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`发布于 2020-05-28 15:41:11
"k“是用来对您生成的JWT签名的秘密,您的假设是正确的。
然而,https://mkjwk.org (和jabber)使用Base64 64-url (RFC 4648§5)编码的秘密。在签署JWT之前,请尝试解码"k“的值,因为任何其他库(和算法)通常都不期望有编码的秘密,特别是url编码的秘密。
您可以签出https://jwt.io/,手动创建或修改JWT,并查看这些JWT发生了什么,并选择是否对秘密进行编码。然而,它以透明的方式处理base64 64-url编码。
https://stackoverflow.com/questions/61490726
复制相似问题