LoginSignup
25
28

More than 3 years have passed since last update.

ニフクラ mobile backendの署名処理をPHPで実装してみた

Last updated at Posted at 2015-04-21

ニフクラ mobile backendではREST APIを提供しています。そのためSDKを提供しているプラットフォーム(iOS/Android/JavaScript/node.js/Unity)以外の言語からでもデータを操作したり、プッシュ通知を作成するといったことが可能です。

別な言語からニフクラ mobile backendを操作する際に最大のネックになりそうなのがシグネチャを作成する処理になるかと思います。そこでREST API リファレンス : シグネチャの生成方法 | ニフクラ mobile backendを参考にPHPで実装してみました。

答え

<?php

$method = 'GET';
$fqdn   = 'mbaas.api.nifcloud.com';
$api_version = '2013-09-01';
$path        = 'classes/TestClass';
$hash = [];
$hash['where'] = json_encode(array("testKey" => "testValue"));
$timestamp = "2013-12-02T02:44:35.452Z";

// 日付はこんな感じで
// $timestamp = date(DATE_ISO8601, time());

$application_key = '6145f91061916580c742f806bab67649d10f45920246ff459404c46f00ff3e56';
$client_key      = '1343d198b510a0315db1c03f3aa0e32418b7a743f8e4b47cbff670601345cf75';

$header_string  = "SignatureMethod=HmacSHA256&";
$header_string .= "SignatureVersion=2&";
$header_string .= "X-NCMB-Application-Key=".$application_key . "&";
$header_string .= "X-NCMB-Timestamp=".$timestamp . "&";
$header_string .= http_build_query($hash);

$signature_string  = $method . "\n";
$signature_string .= $fqdn . "\n";
$signature_string .= "/" . $api_version . "/" . $path ."\n";
$signature_string .= $header_string;

echo base64_encode(hash_hmac("sha256", $signature_string, $client_key, true)); 
echo "\n";

このコードでドキュメントに書かれているシグネチャが生成されます。

データはJSONで

連想配列からjson_encode関数を使ってJSONにエンコードします。

$hash['where'] = json_encode(array("testKey" => "testValue"));

その上でURLエンコードします。この辺りは関数が多い、PHPの良さが活かせます。

$header_string .= http_build_query($hash);

シグネチャ用文字列の生成

基本的に文字列を順番にくっつけるだけです。$header_stringはキーの自然順序付け、昇順となっています。なので大文字→小文字、かつA→Zの順番になっています。

さらにリクエストメソッドやAPIパスなどをつけて完成です。この辺りは関数の引数に指定しておくのが良さそうです。

シグネチャ生成

シグネチャはクライアントキーを使って、HmacSHA256でエンコードし、さらにその結果をBase64でエンコードしています。

echo base64_encode(hash_hmac("sha256", $signature_string, $client_key, true));

最後の引数のtrueは hash_hmac がデフォルトで16進数値で返却するようになっているため、RAWデータでの出力を指定するものです。


正しいシグネチャさえ生成できれば、ニフクラ mobile backendの操作は難しくありません。サーバサイドと連携させれば、より柔軟なシステム構成が実現するはずです(プッシュ通知だけ使うなど)。

サーバー開発不要!アプリ開発をよりスマートに、スピーディに。 | ニフクラ mobile backend

25
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
28