mixi Developer Center (ミクシィ デベロッパーセンター)

mixiアプリ

mixiアプリ » 技術仕様(Graph API方式) » PC » はじめてのmixiアプリ » チュートリアル » スタートURLでの署名認証

スタートURLでの署名認証

スタートURLが正しく設置できていれば、次のように表示されます。

app_top.png

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 の署名検証クラスを用いて、署名検証を行っています。

 

前ページ チュートリアル用プログラムの設置

次ページ 自分と友人の情報を表示(1)

 

 

このページの上部へ