如何生成与JWT

时间:2015-11-27 15:29:55

标签: encryption elixir jwt

我正在使用Guardian通过Elixir / Phoenix应用程序实现JWT身份验证。我正在使用HS512算法。我需要一把钥匙。这个密钥是否有任何条件,只要它必须是512位或更长?它可以是任意字符串,对吗?

5 个答案:

答案 0 :(得分:5)

您需要在安装了OpenSSL库的Linux计算机上运行此命令:

JSONObject json = new JSONObject(); json.put("siteId", ""); if (wtConnected == true) { json.put("patientId", 15); json.put("deviceMACId", DeviceMac); json.put("readingType", 1003); json.put("deviceData", weight); json.put("deviceType", "WeightScale"); } else if (bpConnected == true) { json.put("patientId", 5); json.put("deviceMACId", DeviceMac); json.put("readingType", 1002); json.put("deviceData", bpdata); json.put("deviceType", "BPMonitor"); } json.put("assetId", ""); json.put("geoLocationLatitude", ""); json.put("clientId", ""); json.put("timeStamp", System.currentTimeMillis()); json.put("deviceRawData", ""); json.put("geoLocationLongitude", ""); System.out.println("Json Is:" + json);

此命令的输出是HS512(HMAC SHA512),您可以将其用作任何JWT库的签名密钥。

答案 1 :(得分:2)

我非常有信心任何字符串都能正常工作。最佳做法是将该字符串存储在环境变量中,然后从中拉出应用程序。

答案 2 :(得分:0)

签名密钥是您希望的任何值或长度的字节数组。大多数JWT库都允许您使用任何字符串作为键,该字符串将转换为字节数组。

要生成经过bs64编码的安全20字节密钥,

dd if=/dev/random bs=20 count=1 status=none | base64

答案 3 :(得分:0)

openssl rand -base64 172 | tr -d '\n'

OpenSSL生成129个字节的机密((172 * 6)/ 8)。 129字节适合HS512(请参见https://github.com/ueberauth/guardian/issues/152)。

tr删除换行符。

答案 4 :(得分:0)

万一有人来访:Guardian为此添加了一个混合任务。

mix guardian.gen.secret

https://hexdocs.pm/guardian/Mix.Tasks.Guardian.Gen.Secret.html#content