SwitchBot API v1.1 の認証(Ruby バージョン)
2022/10/12
先日、SwitchBot API の v1.1 が公開された
v1.1 では認証方法が変わっている
公式ドキュメントには Python と JavaScript での認証方法のサンプルコードが載っていたが、Ruby がなかったので書いてみた
コード
app.rb
require 'securerandom'
require 'base64'
require 'openssl'
token = 'hoge-token'
secret = 'fuga-secret'
t = (Time.now.to_f * 1000).to_i
nonce = SecureRandom.alphanumeric
sign = Base64.strict_encode64(OpenSSL::HMAC.digest('sha256', secret, "#{token}#{t}#{nonce}"))
puts "Authorization: #{token}"
puts "t: #{t}"
puts "sign: #{sign}"
puts "nonce: #{nonce}"
- token: アクセストークン
- secret: アクセストークンシークレット(SwitchBot アプリ v6.14 以降で取得可能)
- t: 13桁のタイムスタンプ
- nonce: 利用するプログラムで生成した UUID キー
- sign: 特定のアルゴリズムで生成した文字列
実行
実行すると必要な情報が出力される
$ ruby app.rb
Authorization: hoge-token
t: 1665582731060
sign: Lk4PPsJLZXAN6yhRTfhE5Vargx9N0iIBJRO+YeAkyJU=
nonce: flMkSCm3PkBgOukF
リクエストヘッダーに追加して curl などでリクエストしたらOK(例はデバイスを取得する)
$ curl -X GET 'https://api.switch-bot.com/v1.1/devices' \
--header 'Authorization: hoge-token' \
--header 't: 1665582731060' \
--header 'sign: Lk4PPsJLZXAN6yhRTfhE5Vargx9N0iIBJRO+YeAkyJU=' \
--header 'nonce: flMkSCm3PkBgOukF'
本当は Ruby で API を叩くところまでやりたかったけど、なぜかうまくいかなかったので調査中