Beamの署名ヘッダ検証の仕様について

投稿者: Anonymous

SORACOM BeamのHTTPエントリーポイントに設定するヘッダ付与の署名ヘッダ(X-Soracom-Signature)の検証仕様・アルゴリズムを教えてください。

アプリケーションサーバにて、リクエストの正当性検証のためにIMSIの突き合わせとセットで利用したい次第です。

解決

ドキュメントに記載ができておらず、失礼いたしました。追記したいと思います。

仕様

現状のシグネチャ仕様としましては、下記のようになっております。

事前共有鍵: topsecret
IMSI: 440101111111111
TIMESTAMP: 1445587157992

であった場合、

SHA256('topsecret'+'x-soracom-imsi=440101111111111x-soracom-timestamp=1445587157992')

のように計算されます。

計算実行例

irb(main):001:0> require 'digest/sha2'
=> true
irb(main):002:0> Digest::SHA256.hexdigest 'topsecret'+'x-soracom-imsi=440101111111111x-soracom-timestamp=1445587157992'
=> "abb87746040d112848d5b331ccfbc70a9d663173d7e9f928ddab19d4626140d9"

検証用サンプルコード(Ruby の Rack環境を想定)

def verify_signature(secret = 'topsecret')
  string_to_sign = request.env
    .select{|k,v| k=~/HTTP_X_SORACOM/ && !(k=~/HTTP_X_SORACOM_SIGNATURE/)}
    .map{|k,v| "#{k.sub(/HTTP_/,'').gsub(/_/,'-').downcase()}=#{v}"}
    .sort().join()
  calculated_signature = Digest::SHA256.hexdigest secret + string_to_sign
  result = (calculated_signature == env['HTTP_X_SORACOM_SIGNATURE'])

検証方法

Beamの設定で https://beamtest.soracom.io に対して IMSIヘッダと署名ヘッダを付けて頂いて、http://beam.soracom.io:8888 にアクセスしますと、署名検証の過程がご確認頂けます。
(beamtest.soracom.io は、事前共有鍵が topsecret である事を期待して動作します)

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *