mixiアプリ » 技術仕様(Graph API方式) » PC » はじめてのmixiアプリ » チュートリアル » ライフサイクルイベントの署名検証
ライフサイクルイベントの署名検証
ライフサイクルイベント通知の設定
ライフサイクルイベント通知を受け取るには、 Partner Dashboard の「アプリ設定変更」画面で、ライフサイクルイベントの設定を行います。
ここでは「アプリ追加情報」のみ設定します。通知を受け取るプログラムは lifecycle-event-add.php です。
上記のように設定を行えば、ライフサイクルイベントのアプリ追加情報が 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 について」をご参照ください。
「ライフサイクルイベントの署名検証」の説明は以上となります。
公開鍵証明書
最新の公開鍵証明書は下記のリンク先をご確認ください。
https://developer.mixi.co.jp/news/news_apps/016695.html
チュートリアル へ戻る