neb*_*n42 6 validation node.js jwt loopbackjs keycloak
我使用 Keycloak 4.8.0 作为身份验证服务器。我已经配置了一个领域,该领域发布使用 EC512 签名的 JWT。我https://example.com/auth/realms/myrealm/protocol/openid-connect/token通过提供用户的客户端 ID、客户端密码、用户名和密码通过端点获取令牌。
当通过 Keycloak 自省 JWT 时,https://example.com/auth/realms/myrealm/protocol/openid-connect/token/introspect它显示为有效。然后我在 LoopBack 4 之上构建了一个 Node.js 应用程序,它提供了一个 REST 服务。在那里我想用passport-jwt. 我提供了公钥,但我总是收到错误TypeError: "ES512" signatures must be "132" bytes, saw "138"。(有趣的是,当使用 Keycloak 4.7.0 时,错误是TypeError: "ES512" signatures must be "132" bytes, saw "139")。
所以签名似乎是无效的。例如,https : //jwt.io能够解码 JWT,但在提供公钥时也不会显示有效签名。公钥可能无效。除了从管理控制台复制密钥之外,我还用来https://example.com/auth/realms/myrealm/protocol/openid-connect/certs检索密钥。然后我在这个答案的帮助下将其转换为 PEM 。键匹配。
所以我在这里有点不知所措。当然,Keycloak 有可能生成无效签名,但我对此表示怀疑。更有可能是我做错了什么,可能是在领域配置上,但我看不到哪里。
对于任何想要尝试验证签名的人来说,这里有一个 JWT 示例,我如上所述获得了它:
eyJhbGciOiJFUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJwdEVYeWpnbGlwdlp3OGRXSUc1Ml8xNFpONTdnWHNtWUdrdUVJSEplSVJrIn0.eyJqdGkiOiJiNmI1NTI4Ni0zY2NiLTRiNzQtYWFlZC1hOGI2MzBiZjQ5NmEiLCJleHAiOjE1NDUwODM0NjYsIm5iZiI6MCwiaWF0IjoxNTQ1MDgzMTY2LCJpc3MiOiJodHRwczovL2F1dGguaW5tYXQubG9jL2F1dGgvcmVhbG1zL2lubWF0IiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjViNWQ5NmI1LTBmZjgtNDAyYi05NDAxLTQyYTExODAzMjFlZiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImlubWF0IiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiZjAxMmIzOTMtYTY0Ny00ZDhkLTk4MDQtZDQ3MzNkM2Y4MjVjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoidGVzdGVyIiwiZW1haWwiOiJ0ZXN0ZXJAdGVzdC5jb20ifQ.MIGIAkIBzvH1R-9fNFp8jlw-TeFidmC03uNov6IhDc23XMB9eHga8zdF4ybDmxDoAkB-NAJnDRUDNCtw3ooRxNSApje9oCkCQgHkrbYSN3L5LBA1OM5yb9WSQVaxItcspnCtMtW1QogaAYp0v9JwQA7VHL6ofEp3pcXLaKnFzVgP6FvDCwGgIJGFfw
Run Code Online (Sandbox Code Playgroud)
这是我从管理控制台复制得到的公钥:
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBTrJ+u+k3rqKmuvzykwcMfJMVEieQtc1ldlj2Q9vfsWHbNc95xmnsIgcYcsJNVZCY8NnzFBmYSa0G7rNjclS8xGQB4uDs4KV91WaDRmc3DqwDvupvWVw3M1RG64FteoGwq098p6bxog/tgyNWeYzOTpfunXi0Yp4p+ZrMxlaYdSMuDyU=
Run Code Online (Sandbox Code Playgroud)
由于passport-jwt需要 PEM 格式,因此我将其输入到库中,如下所示:
-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBTrJ+u+k3rqKmuvzykwcMfJMVEieQ
tc1ldlj2Q9vfsWHbNc95xmnsIgcYcsJNVZCY8NnzFBmYSa0G7rNjclS8xGQB4uDs
4KV91WaDRmc3DqwDvupvWVw3M1RG64FteoGwq098p6bxog/tgyNWeYzOTpfunXi0
Yp4p+ZrMxlaYdSMuDyU=
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
更新:使用 RS256 时,我会得到签名进行验证。所以它可能确实是一个 Keycloak 错误。
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |