如何解码 Angular 中的 JWE 令牌

How to decode JWE token in Angular

我有这个问题,我通过这种方式使用EncryptingCredentials在.net core中创建了一个JWE:

var key = Encoding.ASCII.GetBytes(Configuration["Core:JwtSecret"]);
var encryptionkey = Encoding.ASCII.GetBytes(Configuration["Core:JwtEncrype"]);

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = subject,
    Expires = DateTime.UtcNow.AddDays(Convert.ToInt32(Host.Config["Core:JwtDays"])),
    SigningCredentials =
        new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
    EncryptingCredentials =
        new EncryptingCredentials(new SymmetricSecurityKey(encryptionkey), SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
user.Token = tokenHandler.WriteToken(token);

如何使用 angular 读取令牌的数据?

您可以实现一个 Web API 端点,它将接受您的 JWE 令牌作为输入参数,对其进行解密和验证,return 将其有效负载(内容)作为 JSON。然后,您可以轻松地在 angular 应用程序中使用 JSON。在这种情况下,您在服务器端使用您的签名和加密密钥并将它们保密。

此外,您可以考虑使用 JWT 而不是 JWE。在任何情况下,您都可以在 public 客户端(angular 应用程序)中解码令牌。这类似于 OpenID Connect 协议的 user_info 端点。如果您在服务器端(私人客户端)解密令牌,加密将很有用。

在 angular 应用程序中使用签名和加密密钥会将它们暴露给 public。

或者,您可以引入另一个未加密的 JWT 令牌,并将其 return 引入您的 angular 应用程序,而不是 JWE 令牌,或者除了 JWE 令牌之外。它将类似于 OpenID Connect 协议中的 id_token。

angular 末尾有可用的软件包。如果适合您的目的,您可以试试这个包 https://www.npmjs.com/package/jwt-decode