【问题标题】:How to decode JWE token in Angular如何在 Angular 中解码 JWE 令牌
【发布时间】:2021-04-12 11:21:24
【问题描述】:

我有这个问题,我通过这种方式使用 EncryptingCredentials 在 .net 核心中创建了一个 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 读取令牌的数据?

【问题讨论】:

标签: c# angular .net-core jwt jwe


【解决方案1】:

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

此外,您可以考虑使用 JWT 代替 JWE。无论如何,您都可以在公共客户端(角度应用程序)中解码令牌。这类似于 OpenID Connect 协议的 user_info 端点。如果您在服务器端(私人客户端)解密令牌,加密将很有用。

在 Angular 应用程序中使用签名和加密密钥会将它们公开。

或者,您可以引入另一个未加密的 JWT 令牌,并将其返回到您的 Angular 应用程序,而不是您的 JWE 令牌或作为您的 JWE 令牌的补充。它将类似于 OpenID Connect 协议中的 id_token。

【讨论】:

    【解决方案2】:

    在 angular 端有可用的软件包来执行此操作。如果它适合你的目的,你可以试试这个包https://www.npmjs.com/package/jwt-decode

    【讨论】:

    • 这个包不支持JWE,它只是支持JWT。
    • 我以为您指的是 JWT
    猜你喜欢
    • 2020-09-22
    • 2017-04-16
    • 2016-10-08
    • 2021-03-24
    • 2019-01-21
    • 2020-01-08
    • 2022-01-11
    • 2016-11-15
    相关资源
    最近更新 更多