7

我有这个问题,我通过这种方式使用 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 读取令牌的数据?

4

2 回答 2

8

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

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

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

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

于 2021-01-15T07:53:42.793 回答
-1

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

于 2021-01-20T18:48:58.930 回答