mixiアプリ » 技術仕様(Graph API方式) » PC » はじめてのmixiアプリ » チュートリアル » スタートURLでの署名認証
スタートURLでの署名認証
スタートURLが正しく設置できていれば、次のように表示されます。
mixiサーバからスタートURLへのリクエストには署名が付加されており、不正アクセス対策のために署名検証を行う必要があります。
チュートリアル用プログラムでも署名検証を行っています。上のように「署名検証:OK」と表示されていれば署名検証が成功しています。
署名の検証
start.php にスタートURLでの署名検証を実装しています。以下で説明していきます。
start.php
1 <?php 2 require_once('OAuth.php'); 3 require_once('functions.php'); 4 require_once('config.php'); 5 6 define('PUBLIC_KEY_PC_TOP', '-----BEGIN CERTIFICATE----- 7 MIIDNzCCAh+gAwIBAgIJANH20l9V3QyGMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV 8 BAYTAkpQMREwDwYDVQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDAeFw0x 9 MzExMDcwODQwMzhaFw0yMzExMDUwODQwMzhaMDIxCzAJBgNVBAYTAkpQMREwDwYD 10 VQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDCCASIwDQYJKoZIhvcNAQEB 11 BQADggEPADCCAQoCggEBAMjrvmoMZdlxPbW86JO1VbIguv8ddAQV/+ZtjmanLXU6 12 QjbGz/0wAONo19R/z4oqccNI1USmGBocuNtzFaIbsXVohaJpJm6cJMQ6dYqJbWZD 13 C0m8Va+8fx3xjFs/MckvymPbNCSxsycSkiwBNLM0atNiBnRRr5rLHwOlXDarOkaL 14 sAYPA/EctZq4Mg380dFpDC1mqzjQvXRQ9Z9z/MD75b06EwYY4L/Yb+F92S5BhagM 15 pSxfIJF7VTmA9de2PE67fhoQOXGg48fS2XE2uKDMuE1U/rQIYzAw3twFJNXiCZ3j 16 F3uo8pjAy1kWY4uh9KwQ2zXEXSYjJOVDu2eX7Q+ZJDsCAwEAAaNQME4wHQYDVR0O 17 BBYEFCJwA3yljcHQ917eLcEh1kIzGIE1MB8GA1UdIwQYMBaAFCJwA3yljcHQ917e 18 LcEh1kIzGIE1MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAMSUBJc8 19 LGLuRvhpqBfUcuHuQzzMM4Xw9x2pEcBAocu6wijvYZt1ATI6zzxC6213BT63ei4W 20 UzXPYUjC70BGqQu4lhFKRECl48BLJzELayS6Lh+teYmSIdXc3DNsK9L/T19deeC5 21 iHjkD76z6YPjsPpLyo3TkCi2Ebz+oNkCXQYCZsI0QToTuMuYyL+bsDyFmWTRlvx2 22 KGZe3pdbMLZW4QSHoN6h0rSpgYKi6vdKbPzLcFEko1oYUwFCHDENvqVfZdMEuauA 23 W58UChLDu+5bVdldYrmXkZ+u/PiSCsIVKvfCZ+JlgJR4wX+4YgICl5FbRhD/qg2l 24 S791sxe9mHZeByk= 25 -----END CERTIFICATE-----'); 26 27 28 class MixiSignatureMethod extends OAuthSignatureMethod_RSA_SHA1{ 29 30 protected function fetch_public_cert(&$request){ 31 return PUBLIC_KEY_PC_TOP; 32 } 33 34 protected function fetch_private_cert(&$request){ 35 return; 36 } 37 } 38 39 if(isset($_POST["oauth_signature"])){ 40 41 // Build a request object from the current request 42 $request = OAuthRequest::from_request(); 43 44 // Initialize the new signature method 45 $signatureMethod = new MixiSignatureMethod(); 46 47 // Check the request signature 48 $signature = $_POST["oauth_signature"]; 49 $signatureValid = $signatureMethod->check_signature($request, null, null, $signature); 50 51 $msg = ($signatureValid) ? 'OK' : 'NG'; 52 53 }else $msg = '未検証'; 54 55 ?> 56 <!DOCTYPE html> 57 <html> 58 <head> 59 <meta charset="UTF-8" /> 60 <title>はじめてのmixiアプリ</title> 61 </head> 62 <body> 63 <div> 64 はじめてのmixiアプリ 65 </div> 66 <div> 67 署名検証:<?=h( $msg )?> 68 </div> 69 <ul> 70 <li><a href="user-auth.php">ユーザ認可</a></li> 71 <li><a href="graph-people-get.php">自分の情報を取得</a></li> 72 <li><a href="graph-people-get.php?groupId=@friends">友人の情報を取得</a></li> 73 <li><a href="payment.php">課金API</a></li> 74 </ul> 75 <div> 76 <a href="start.php">top</a> 77 </div> 78 </body> 79 </html>
3行目では functions.php を読み込んでいます。functions.php では 次のように関数 h() を定義しています。
functions.php
1 <?php 2 3 // HTMLエスケープ用の独自関数 4 function h($str){ 5 return htmlspecialchars($str, ENT_QUOTES); 6 }
これは、html エスケープを行う関数です。htmlspecialchars() を呼び出すのみですが、関数名の短縮と第二引数を ENT_QUOTES 固定とするために作成しています。
start.php では67行で使用しています。このチュートリアルプログラムではこのように html 部分への値出力は h() 関数を用いて行いますので以後のプログラムでもご注意ください。
start.php について続きを見ていきます。
署名検証には OAuth.php を用い、6-26行および30行で署名検証に使う公開鍵を設定しています。
公開鍵は「起動時のパラメータとOAuth Signatureの検証」に記載のものとなります。将来、公開鍵の変更があった際にはここで設定する公開鍵も適宜ご変更ください。
39行 署名はアプリ起動時にPOSTパラメターoauth_signature で渡されます。それ以外のときには渡されませんので、 $_POST["oauth_signature"] に値がセットされているときのみ署名検証を行うようにします。
41-49行で OAuth.php の署名検証クラスを用いて、署名検証を行っています。
公開鍵証明書
最新の公開鍵証明書は下記のリンク先をご確認ください。
https://developer.mixi.co.jp/news/news_apps/016695.html
前ページ チュートリアル用プログラムの設置
次ページ 自分と友人の情報を表示(1)