概要
jwt (JSON Web Token) は JSON の情報をあるアルゴリズムで暗号化し送受信する仕組みです
トークンの送信するだけなので比較的に簡単に使えます
認証などに使われたりします
今回は Ruby で jwt を使ってトークンの生成や復号化を行ってみました
環境
- Ruby 3.0.0
- jwt 2.0.10
インストール
bundle init
vim Gemfile
gem "jwt"
bundle install
Secret パスワードを使って暗号化/復号化
パスワードを使って暗号化と復号化を行います
送信側と受信側で同じでシークレットを共有する必要があります
使用できるアルゴリズムは「HS256」「HS512256」「HS384」「HS512」になります
RbNaCl を使うと更に暗号化の種類を増やせます
vim test.rb
require "jwt"
payload = {
"data" => "test"
}
hmac_secret = 'my$ecretK3y'
alg = "HS512"
token = JWT.encode payload, hmac_secret, alg
puts token
decoded_token = JWT.decode token, hmac_secret, true, { algorithm: alg }
puts decoded_token
公開鍵認証 (RSA) を使って暗号化/復号化
公開鍵を使って暗号化と復号化を行います
暗号化する側で秘密鍵を使い復号化する側で公開鍵を使います
使用できるアルゴリズムは「RS256」「RS384」「RS512」になります
openssl genrsa > priv.key
openssl rsa -pubout < priv.key > pub.key
vim test.rb
require "jwt"
require "openssl"
payload = {
"data" => "test"
}
OpenSSL::PKey::RSA.new 2048
pri_key = OpenSSL::PKey::RSA.new File.read("./priv.key")
pub_key = pri_key.public_key
alg = "RS512"
token = JWT.encode payload, pri_key, alg
puts token
decoded_token = JWT.decode token, pub_key, true, { algorithm: alg }
puts decoded_token
最後に
他にもいろいろな暗号化方式を使ったトークンの生成方法があります
シークレットの共有方式よりも鍵を使った方式のほうがセキュアな気はします
0 件のコメント:
コメントを投稿