概要
paiza.ioでelixirやってみた。
jwtの検証やってみた。
検証したjwt
-
出所
wikiペディア -
全体
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
-
タイプ
HS256 -
キー
secretkey -
ヘッダー
{
"alg": "HS256",
"typ": "JWT"
} -
ペイロード
{
"loggedInAs":"admin",
"iat":1422779638
} -
シグニチャー
gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
結果
{"alg":"HS256","typ":"JWT"}
{"loggedInAs":"admin","iat":1422779638}
gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI=
サンプルコード
defmodule Jwt do
def decode(str) do
[head, payload, _] = String.split(str, ".")
head = String.replace(head, "-", "+")
head = String.replace(head, "_", "/")
{:ok, res} = Base.decode64 head
res
|> IO.puts
payload = String.replace(payload, "-", "+")
payload = String.replace(payload, "_", "/")
{:ok, res} = Base.decode64 payload
res
|> IO.puts
end
def enc(str) do
:crypto.mac(:hmac, :sha256, "secretkey", str)
|> Base.encode64( case: :lower)
|> String.replace("+", "-")
|> String.replace("/", "_")
|> IO.puts
end
end
Jwt.decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI")
Jwt.enc("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9")
成果物
以上。