【问题标题】:How can I encrypt JWT Token in Web Api C#?如何在 Web Api C# 中加密 JWT 令牌?
【发布时间】:2016-06-14 16:58:32
【问题描述】:

我的 Jwt 令牌如下所示:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsImF1ZCI6Imh0dHA6XC9cL2V4YW1wbGUuY29tIiwiaWF0IjoxMzU2OTk5NTI0LCJuYmYiOjEzNTcwMDAwMDAsImV4cCI6MTQwNzAxOTYyOSwianRpIjoiaWQxMjM0NTYiLCJ0eXAiOiJodHRwczpcL1wvZXhhbXBsZS5jb21cL3JlZ2lzdGVyIiwidGVzdC10eXBlIjoiZm9vIn0.UGLFIRACaHpGGIDEEv-4IIdLfCGXT62X1vYx7keNMyc

如果我复制上述 JWT 令牌并将其粘贴到 https://jwt.io/ 中,则实际信息显示如下

Image

我想加密 JWT 令牌,没有人可以访问我在 Web Api 中的信息。所以,我想使用任何加密算法,如果是,请给我正确的解决方案

这是我授权 JWT Token 的 Startup.cs 文件。

        // Api controllers with an [Authorize] attribute will be validated with JWT

        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { audience },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {
                    new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
                }
            });

    }

【问题讨论】:

  • 虽然 JWT 允许加密令牌,但通常没有必要,因为连接已经使用 TLS/SSL 保护。

标签: c# encryption jwt


【解决方案1】:

您究竟为什么认为有人可以看到这些信息是个问题?如果您使用 JWT 进行身份验证,那么只有刚刚通过身份验证的用户才能获得此令牌,并且它可能包含有关此用户的信息。因此,用户能够看到自己的信息并没有什么坏处。

最重要的是,令牌是经过修改的,因此没有人可以伪造它并伪装成另一个用户,这就足够了。

正如 cmets 中所提到的,无论如何你都应该使用 TLS,所以它在转换中是加密的。

【讨论】:

  • 在我的 JWT 令牌中,我想存储用户 ID 等信息。这样有人可以得到它并破解
  • "Somebody" 只是拥有此 ID 的用户,或者如果您使用 TLS,则可以物理访问机器的人,所以这不是问题。知道 UserId 也不是问题(除非您有其他更重要的漏洞),因此仅使用来自 SQL 服务器的身份也没有问题,例如问题是如果您在有请求时不检查用户输入和访问权限。另一件事是,即使用户知道 userId,他们也无法在 JWT 中更改它,因为它是 mac'ed。
猜你喜欢
  • 2015-01-02
  • 2021-08-13
  • 2017-12-02
  • 2017-06-11
  • 2019-07-25
  • 1970-01-01
  • 2019-01-27
  • 2018-11-25
  • 2013-08-15
相关资源
最近更新 更多