我正在尝试使用Elixir创建JWS令牌。我得到的是:
我需要的是:
JWS头如下所示
{
"x5t#S256": {{ cert thumbprint }},
"alg":"RS256"
}为了获得标头标记,我只需将其转换为base64,它就完成了。与令牌体一样,我只是将有效负载转换为base64。
问题是如何获得令牌签名。据我所知,应该这样做:
token signature = base64(rsa-sha256(token header + "." + token body))Q1:我的逻辑正确吗?
Q2:如何对药物进行rsa-sha256加密?还是和:crypto.hash(sha256, ...)一样
发布于 2019-03-16 06:18:43
我还没有在Elixir中使用JWS,但我决定将其作为一个练习进行尝试。可以使用RSA生成JWS签名,如下所示:
rsa_private_key = JOSE.JWK.from_pem_file("rsa-2048.pem")
header = %{"alg" => "RS256"}
payload = %{"example" => "foo"}
JOSE.JWT.sign(rsa_private_key, header, payload)输出:
{%{alg: :jose_jws_alg_rsa_pkcs1_v1_5},
%{
"payload" => "eyJleGFtcGxlIjoiZm9vIn0",
"protected" => "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9",
"signature" => "T2llXS2pGN-jev10Xd5EZQmaEih_dn9DIn5FJJg8ocEwIpNLupEWiNLz-5mP21z9JGpyYPFaRuq77AtKL67nP7KMDTpKKYJonOxQdL31sHU4vTKBRf-2XcVbDLGkST5dUMUWHOS106Sw_0x7DSiuFBUzkkYQ_lZKES8idVUp88Kx4uWU65Yoti0_Pu7aVLRGWDu0EiMjzuTPTBkMoib21VEVBqrJ4jiKXFudEFiNNSaV_GOH9yNZqyxwl4RhCYYT9U-Mda8Dc7xPjQk0LaJhwlaV91OhxJQHP2fGR8XkznHFlRRHTEsesYgl9OKZuSzVXoffydLc1VotphKUnG1WZQ"
}}如果你想要简略的形式:
JOSE.JWT.sign(rsa_private_key, header, payload) |> JOSE.JWS.compact生产:
{%{alg: :jose_jws_alg_rsa_pkcs1_v1_5},
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleGFtcGxlIjoiZm9vIn0.T2llXS2pGN-jev10Xd5EZQmaEih_dn9DIn5FJJg8ocEwIpNLupEWiNLz-5mP21z9JGpyYPFaRuq77AtKL67nP7KMDTpKKYJonOxQdL31sHU4vTKBRf-2XcVbDLGkST5dUMUWHOS106Sw_0x7DSiuFBUzkkYQ_lZKES8idVUp88Kx4uWU65Yoti0_Pu7aVLRGWDu0EiMjzuTPTBkMoib21VEVBqrJ4jiKXFudEFiNNSaV_GOH9yNZqyxwl4RhCYYT9U-Mda8Dc7xPjQk0LaJhwlaV91OhxJQHP2fGR8XkznHFlRRHTEsesYgl9OKZuSzVXoffydLc1VotphKUnG1WZQ"}这是公钥,如果您想要验证它的话:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAtRPXSP1W+5sgVLeRFYrrF6L7+gaEkPOWV2FDtPL/vRQH77bicJYb
oVytE/8JyHj8kH24hxwCy2LFl5fZLaIrqYBy1B1t8LtxTRVhi3JIc76IGZ3dfxrz
Dnv94Vu9BRxE7y37f7w8ulDVlGpmJhfCIMj8SYJrFWgHlQB2u7c/B43RE6uphRfD
nr4FkJ3ChUFKhuVZHm27r5/CllHNhMejA/WawtlWKdU33In1Xp2O+GxjLKoYuGGQ
U9MdrismDtn6bVcq5K97bByxelJel2rUG4sbtQk01gVtfun63rSzOP9EkNJOoRll
YDm3HQlDUY7+D9AMG3XlQuR7tlDXQtGIJQIDAQAB
-----END RSA PUBLIC KEY-----发布于 2019-03-16 22:12:02
请参阅JWT与凤凰城的长生不老药上的示例
使用:bcrypt_elixir和:guardian
https://stackoverflow.com/questions/55184962
复制相似问题