高木のブログ

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 を叩くところまでやりたかったけど、なぜかうまくいかなかったので調査中

参考


ytkg

Written by ytkg, Twitter, GitHub