如何验证使用jwt.io上的密钥遮盖身份验证提供程序创建的HS256签名JWT令牌 [英] How to verify a HS256 signed JWT Token created with Keycloak authentication provider on jwt.io

查看:26
本文介绍了如何验证使用jwt.io上的密钥遮盖身份验证提供程序创建的HS256签名JWT令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试验证https://jwt.io上使用本地RANKeyCloak身份验证提供程序生成的HS256 JWT令牌。

KeyCloack实例在我的本地机器上的码头容器中运行。我应用了与此答案中描述的几乎相同的步骤(相反,使用RS算法,并按所述方式工作):https://stackoverflow.com/a/55002225/1534753

我的验证过程非常简单:

1.)使用以下命令从我的本地docker KeyCloak实例请求令牌(使用Postman): 发布请求http://localhost:8080/auth/realms/dev/protocol/openid-connect/token

2.)复制jwt.io的"encode"部分中的内标识内容

3.)我验证标头和有效负载是否符合预期且正确

4.)我从KeyCloak实例管理仪表板复制了客户端密码,您可以在下图中看到引用:

5.)我将秘密粘贴到jwt.io上的"Verify Signature"部分,"Encode"令牌部分更改,从而导致无效签名和无效(即不同)令牌。

我的核心问题是我在这里遗漏了什么?当我应用预期的密码时,为什么令牌会更改!?我应用的是来自客户端的正确密码吗?如果我正确理解了JWT基础设施和标准,那么如果秘密(应用了预期的算法)是有效的,那么它应该保持不变。我的推理是,在KeyCloak上创建JWT的内容是特定的。我还没有接触到KeyCloak上的HS256算法提供程序,所有东西都是使用KeyCloak的docker安装指南的默认设置。与令牌和算法相关的设置设置为使用HS256,并且算法按照预期在JWT的标题部分正确指定,可以在将编码的令牌粘贴到jwt.io页面后进行验证。

我需要此功能才能工作,因为我正尝试在.NET Core web API应用程序中应用相同的JWT验证过程。我在那里遇到了整个问题,即在System.IdentityModel.Tokens.JWTJwtSecurityTokenHandle.ValidateSignature方法中,这会导致签名无效并最终导致异常。

附注:我正在使用Postman及其授权功能访问令牌配置可在下图中看到:

另一个附注是,我有一个用户"John",它属于我的"Demo"领域。我使用他向KeyCloak请求访问令牌。

推荐答案

若要获取用于签名/验证HS256令牌的密码,请尝试使用以下sql:

SELECT value FROM component_config CC INNER JOIN component C ON(CC.component_id = C.id) WHERE C.realm_id = '<realm-id-here>' and provider_id = 'hmac-generated' AND CC.name = 'secret';

如果您使用生成的密码来验证令牌,则签名应该匹配。我不确定此密码是否可以通过UI访问,很可能不能。

来源:https://keycloak.discourse.group/t/invalid-signature-with-hs256-token/3228/3

这篇关于如何验证使用jwt.io上的密钥遮盖身份验证提供程序创建的HS256签名JWT令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆