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
チュートリアル へ戻る