为 JWT 生成密钥?

Posted

技术标签:

【中文标题】为 JWT 生成密钥?【英文标题】:Generate a secret key for JWT? 【发布时间】:2017-10-15 14:58:49 【问题描述】:

目前我有一个用于生成 JWT 令牌的硬编码密钥。生成令牌时随机生成它的最佳方法是什么?另外,我不明白的是,如果秘密是随机生成的,那么如何再次随机生成秘密以进行身份​​验证。我在这里遗漏了什么还是我对它的工作方式有疑问?看来密钥甚至不是随机的。例如,我会在 web.config 中存储它吗

【问题讨论】:

你有解决办法吗?我也有同样的问题 @JayakrishnanGounder - 不是真的......我刚刚创建了一个静态的放在配置文件中 【参考方案1】:

只是扩展@nodd13 的帖子,我已经使用以下(在 LinqPad 中)随机生成一个密钥:

var key = new byte[32];
RNGCryptoServiceProvider.Create().GetBytes(key);
var base64Secret = Convert.ToBase64String(key);
// make safe for url
var urlEncoded = base64Secret.TrimEnd('=').Replace('+', '-').Replace('/', '_');

urlEncoded.Dump();

这确实是随机的,据我了解,您只需执行一次,然后您可以将其存储在 web.config 中以供以后引用。

【讨论】:

存储在 web.config 中用于 web api 2 项目是否安全? Base64 编码字符串末尾的等号不应该作为 base64 字符串预期填充的一部分,其中位分组需要它吗?【参考方案2】:

我使用了blog post中的以下代码

var key = new byte[32];
RNGCryptoServiceProvider.Create().GetBytes(key);
var base64Secret = TextEncodings.Base64Url.Encode(key);

【讨论】:

以上是关于为 JWT 生成密钥?的主要内容,如果未能解决你的问题,请参考以下文章

我需要为每个用户单独管理 jwt 密钥吗?

如何为 php-jwt 生成密钥对?

如何生成用于 com.auth0 java-jwt 的 RSA 密钥?

如何为 JWT 生成和访问密钥

JWT,使用存储在 DB 中的动态密钥

JAVA 代码生成与 JWT 一起使用的 HS512 密钥