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

mixiアプリ

mixiアプリ » 技術仕様(Graph API方式) » PC » はじめてのmixiアプリ » チュートリアル » ライフサイクルイベントの署名検証

ライフサイクルイベントの署名検証

ライフサイクルイベント通知の設定

ライフサイクルイベント通知を受け取るには、 Partner Dashboard の「アプリ設定変更」画面で、ライフサイクルイベントの設定を行います。

ここでは「アプリ追加情報」のみ設定します。通知を受け取るプログラムは lifecycle-event-add.php です。

setting_lifecycle_event.png

上記のように設定を行えば、ライフサイクルイベントのアプリ追加情報が http://example.com/lifecycle-event-add.php へ通知されるようになります。

署名検証

こでれライフサイクルイベントが通知されるようになりましたが、不正なアクセスを防ぐために、署名の検証を行う必要があります。

ライフサイクルイベントの署名検証は、スタートURLの署名検証とさほど変わりません。

lifecycle-event-add.php

 1   <?php
 2   require_once('OAuth.php');
 3   require_once('functions.php');
 4   require_once('config.php');
 5   
 6   define('PUBLIC_KEY_LIFECYCLE_EVENT', '-----BEGIN CERTIFICATE-----
 7   MIIDNzCCAh+gAwIBAgIJAIQ3zDiILtpzMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV
 8   BAYTAkpQMREwDwYDVQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDAeFw0x
 9   MzExMDcwODQwNTBaFw0yMzExMDUwODQwNTBaMDIxCzAJBgNVBAYTAkpQMREwDwYD
10   VQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDCCASIwDQYJKoZIhvcNAQEB
11   BQADggEPADCCAQoCggEBAMxzCu9sUctGAzL/X0/sH2MSRmc/+X2Wx87ObZDpEd5P
12   19mIUQXW6hCXObB3SkE7kMuXiRhtrxwsnB9fjYIUEq/1vsTHkLJoJVUFIumqe6EH
13   c/WZaTmu34WpEUFXNDS4htidXyVqikoDQZF9wdczyH7bLPbekQfRAcyek3E6/7Qi
14   B00yWUqK8FcUOD4ILmtSHXsz4BNqekNgEzfUi5WkBYKtuD5zSunZalbWUPS7xa57
15   o1auVdclaHBfqe8dC5DTbxIe0szpHckQrJF9fJ/bIQSmvY6ADBRGfoLF7Fgoc5x+
16   R5my9weytzg4WdDUjYrxmhy5IpjxytipQqrFDqAUxl8CAwEAAaNQME4wHQYDVR0O
17   BBYEFKCQSlssCWLqd0tT7NVtoBUNzCasMB8GA1UdIwQYMBaAFKCQSlssCWLqd0tT
18   7NVtoBUNzCasMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBALoI7elk
19   ZCv+pUpi6aJepzLnQDYHB2eXpDkpWEUrF1WMvx8ovmWdVeviHqUdFtGL0XZ5tSoV
20   vGE/KQTavag+MfbafKaff4iHXNyNMygeFP7r/FaFQQRafyNfhaXF6sWfwKrOk/Bc
21   jIXFN9tYWN6LEwNgYT0C+OSOppQJzt2y1am15FExAHQcIEFYc+3T+MGGJ7e9H8tn
22   Qz84WmIgNZRUMYQC0PJTsMNVvr+/DTIzjabKz4W8qodXGA7AxXiRYdgC+3RUj/rA
23   lR09PXZ6nRaKiB0KBDIMUlPu/0u0Vw+GBt0ckH0htOKSxsn09jkITFhy3NX7Slbk
24   jlnY4pS9JO+avmM=
25   -----END CERTIFICATE-----');
26   
27   
28   class MixiSignatureMethodLifeCycleEvent extends OAuthSignatureMethod_RSA_SHA1{
29   
30       protected function fetch_public_cert(&$request){
31           return PUBLIC_KEY_LIFECYCLE_EVENT;
32       }
33   
34       protected function fetch_private_cert(&$request){
35           return;
36       }
37   }
38   
39   
40   $request = OAuthRequest::from_request(null, null, null, false);
41   
42   $signatureMethod = new MixiSignatureMethodLifeCycleEvent();
43   
44   $signature = $request->get_parameter('oauth_signature');
45   
46   $signatureValid = $signatureMethod->check_signature($request, null, null, $signature);
47   
48   if($signatureValid == false){
49       error_log(date('Y-m-d H:i:s') . "\n" . print_r('signature invalid', true)."\n", 3, "lifecycle-event-add.log");
50   }
51   
52   // ログ出力
53   error_log(date('Y-m-d H:i:s') . "\n" . print_r($_GET, true)."\n", 3, "lifecycle-event-add.log");
54   
55   header('HTTP/1.1 200 OK');
56   exit;

6-26行、30-32行 公開鍵の設定。
ライフサイクルイベントの公開鍵は「ライフサイクルイベントについて」に記載のものとなります。将来、公開鍵の変更があった際には、ここで設定する公開鍵も適宜ご変更ください。

40-46行 署名検証処理。

53行 ログ出力。

となります。

署名検証が正しかった場合、 lifecycle-event-add.log にログ出力されます。

※40行 OAuthRequest::from_request() は、第4引数を独自拡張していますのでご注意ください。これは、通知をPOSTに設定した場合、PostBody を署名のベース文字列に含めないようにするための措置となります。詳しくは「チュートリアル用プログラムの設置」の「OAuth.php について」をご参照ください。

「ライフサイクルイベントの署名検証」の説明は以上となります。


チュートリアル へ戻る

 

 

このページの上部へ