【问题标题】:How to validate the JWT token of keycloak in C# .Net?如何在 C# .Net 中验证 keycloak 的 JWT 令牌?
【发布时间】:2021-09-01 04:50:59
【问题描述】:

一旦我们在前端获得 JWT 令牌,我们就可以通过使用 Authorization 标头或通过 cookie 来验证后端服务器中的无状态 RestAPI。 this video 中很好地解释了。

如果后端服务器在 C# .Net Framework (MVC) 中,如何验证接收到的 JWT? official documentation 指向 OWIN,未维护。

在看到各种博客和文档时,理论说我们需要从 Keycloak Realms 的公共证书中获取 Modulus & Exponent 参数,然后使用JWT.Net 进行验证

如何实现?

【问题讨论】:

标签: c# jwt keycloak


【解决方案1】:

通过keycloak获取你领域的公共证书:

你会得到这样的东西,需要正确格式化:

  1. 复制您领域的 PublicCertificate

  2. 将其保存在KeyCloakRealm.Public.crt 文件中

  3. 添加标题-----BEGIN CERTIFICATE-----

  4. 使单行证书每行64字节

  5. 添加页脚-----END CERTIFICATE-----

那么下面的代码 sn-p 可以用来验证接收到的 JWT 令牌。

X509Certificate2 certificate = new 
X509Certificate2("KeyCloakRealm.Public.crt");

RSACryptoServiceProvider key =(RSACryptoServiceProvider)certificate.PublicKey.Key;
RSAParameters rsaParameters = key.ExportParameters(false);

RSA rsa = RSA.Create();
rsa.ImportParameters(rsaParameters);

var json = JwtBuilder.Create()
         .WithAlgorithm(new RS256Algorithm(rsa)) // asymmetric
         .MustVerifySignature()
         .Decode(token);
// The above method will throw an appropriate error if the JWT is invalid or cannot be validated against the supplied public keycloak realm
// If there is no exception, you will get the data in your json object

【讨论】:

  • @MickyD:图片和上面的步骤告诉了如何正确格式化通过keycloak收到的证书。在格式化之前,C# 代码将无法识别该格式。不过,Unix 或许能够处理它。这在文档中从未解释过。这将帮助在 C# 上使用 Keycloak 的候选人节省大量时间。
猜你喜欢
  • 2022-07-04
  • 2022-11-21
  • 2021-06-27
  • 2018-06-12
  • 2018-10-16
  • 2021-08-16
  • 2018-07-27
  • 2020-10-12
  • 2020-02-24
相关资源
最近更新 更多