mixiアプリ » 技術仕様(Graph API方式) » スマートフォン » iOS SafariでのCookie有効化について
iOS SafariでのCookie有効化について
3rd Party Cookie 有効化
下記の3rd Party Cookieの有効化(以下、mixi.cookie.enable)と、Safariの設定変更が必要になります。
Cookieを利用してアプリのセッション管理を行っている場合、iOSのSafariのデフォルトの設定のままですとCookieが有効にならず正常に動作しません。
mixi.cookie.enableをcallすると、Cookieが有効な場合、セッション管理が可能になります。
Cookieが無効の場合は、Cookieを有効にする設定変更(※1)が必要な旨を表示した画面へ遷移します。
※1:設定>Safari>サイト越えトラッキングを防ぐ をOFFにする必要があります。
3rd Party Cookie 有効化の方法
3rd Party Cookie 有効化は次の3つの手順で行います。
(1) mixi.cookie.enable()関数の呼び出し
(2) Cookie有効化スクリプトの実行
(3) アプリへリダイレクト
(1) mixi.cookie.enable()関数の呼び出し
3rd Party Cookieを設定できないブラウザの場合は、
まず、アプリのスタートURLで呼び出される最初の画面にて、mixi.cookie.enable()関数を呼び出します。
mixi.cookie.enable()関数はJavaScript API で提供されていますので、事前にJavaScript API の利用準備を済ましておく必要があります。
mixi.cookie.enable()関数は以下のように実行します。
mixi.cookie.enable({
url: "http://example.com/set_cookie.php",
appParams: {hoge: 'fuga'}
});
項目 | 内容 |
---|---|
url | 次項で設置して頂くCookie有効化スクリプトのURL |
appParams | 本APIを利用後アプリにリダイレクトする時に受け取りたいパラメータ。オブジェクト形式で指定。 |
<例> Cookieのチェック後に関数を呼び出す
mixi.cookie.enable()関数を利用する際に、関数の呼び出しとアプリへのリダイレクトがループしないように注意する必要があります。
アプリ内部でCookieの書き込みを行った後に呼び出されるページは
次の様にCookieの存在確認をすることで必要な場合のみmixi.cookie.enable()関数を呼び出すことができます。
!document.cookie の条件は、後術のset_cookie.phpにて、httponly属性がfalseであることが前提のコードです。
httponly属性がtrueでCookieをセットする場合は、そのCookieが参照不可能であることを条件に、mixi.cookie.enable をcallしてください。
(function () {
if (!document.cookie) { // Cookieのhttponly属性がfalseであることが前提のコード
mixi.cookie.enable({
url: "http://example.com/set_cookie.php",
appParams: {hoge: 'fuga'}
});
}
})();
(2) Cookie有効化スクリプトの実行
mixi.cookie.enable()関数が実行されると、urlで指定したCookie有効化スクリプトがGETで呼び出されます。
Cookie有効化スクリプトには下記の処理を含め、アプリのドメイン配下に設置します。
- 署名付きリクエストの検証
- Cookieをセットする処理
- GET で渡るcallback_urlパラメータへのリダイレクト処理
<例> PHPの場合
set_cookie.php
<?php
// 実際には署名付きリクエストの検証を行い、その結果正しいリクエストの場合にのみ以下処理を行う
// Secure属性はtrue、SameSite属性はNoneで指定してください
// PHP7.2以前の場合
setcookie('created_at', time(), time() + 2592000, '/; SameSite=None', '', true, false);
// PHP7.3以降の場合
setcookie('created_at', time(),
[
'expires' => time() + 2592000,
'path' => '/',
'secure' => true,
'domain' => '',
'httponly' => false,
'samesite' => 'None',
]
);
header("Location: " . $_GET['callback_url']);
?>
Cookie有効化スクリプトへのリクエストには、改ざん防止を目的とした署名(OAuth Signature)が付加されています。
悪意を持ったユーザによる不正アクセスを防ぐため、署名の検証を行い以下のチェックを行ってください。
- mixi Platformから送信されたリクエストであること
- リクエストの内容が改ざんされていないこと
署名方式にはRSA-SHA1を利用しています。また公開鍵はこちらに掲載されているものをご使用ください。
実際の検証方法については、署名付きリクエストの検証 に関するドキュメントを参照してください。
GET http://example.com/set_cookie.php?callback_url=http%3A%2F%2Fmixi.jp%2Frun_appli.pl%3Fid%3D31622 %26appParams%3D%257B%2522hoge%2522%253A%2522fuga%2522%257D&oauth_consumer_key=mixi.jp&oauth_nonce=d d947d8beeba0be07050&oauth_signature=mUP4NpHSvMzi%2Fb6%2FvGROv8Q5rdXlr8dwcS7jmK2iIF%2FIlgChIhNpb0dtH GCLuy4FT6C%2FCOJDb001%0AiqAyxZuky%2FmbFvy9U%2BsVgzhlYJgWnx5m%2Fv7Exgqdo3bjnbRiEkOR%2BKGJ1WFaOPlMwby MlMJK%2FGpA%0A7NZ%2FV0K14PZu2tXc3cuZ084apA87NA%2BZSjKslhts8PeNm2UqCMqRUnp0hc0irRk88ICFdiflJbvx%0ArQ OIP34vkUXEU1K2%2BOZZxmwJA9DwzOolfZHpHwFcE6peozdsFHCK9oDWKMv65j3ku7xtQaKvRhip%0AbrNMJfEHMBYrO6%2B6gI Iy3IKsl2I6qG%2FjgQee4g%3D%3D&oauth_signature_method=RSA-SHA1&oauth_timestamp=1348044449&oauth_versi on=1.0&xoauth_signature_publickey=app_touch_20120306
※(注意)GETリクエストです。
(3) アプリへリダイレクト
Cookie有効化スクリプトがcallback_urlへリダイレクト処理を行うと、アプリ起動時と同様にアプリのスタートURLがPOSTで呼び出されます。
アプリ起動時と異なる点は、「(1) mixi.cookie.enable()関数の呼び出し」でappParamsに指定した値が、リクエストボディに含まれて渡ってきます。
例えば、以下のようにappParamsにhoge='fuga'を指定したとします。
mixi.cookie.enable({
url: "http://example.com/set_cookie.php",
appParams: {hoge: 'fuga'}
});
アプリは署名付きリクエストで以下のように呼び出されます。
POST http: //example.com/start_app.php |
※(注意)POSTリクエストです。
またリクエストボディには以下のようなパラメータが含まれます。
項目 | 渡される値、および例 |
---|---|
oauth_consumer_key | リクエストが送信されたコンテナを示すキー 例 : mixi.jp |
oauth_nonce | リクエスト毎に生成されるユニークな値 例 : f32d531cdf60369c16d1 |
oauth_signature | 生成された署名 例 : Au%2F5K%2BRAFRkgUWHpRBPW53UJqR1x6ngKE%2BKRk4n73pAJXrlIUhZgd iMmXxFrUzcf5JjfEdyX9E3B%0AXESsvoGnABDPFTMJvE6V1t5Ge%2BB8qGm Lw8m5wKHu7yCrV1exhVRaiV4ZqdHEX%2BFGeNVP%2BuZtKfxc%0ANHuStGt c0h8V0muC4B1iARji4Or%2BaJEtuI8gwozUAm2T7F80rEcv3yN7Rwb2%2Bm PFa5sXW3Ne%2FPp3%0AWZLZsl4O7mRzn0tdKk%2BypVLlgAvcb9xg%2BDDz ijg1h4zpVPqE22toLSpioJAULOmMjEI2aiGXHcEh%0AQDSV2CWkyFitDLaU C%2Fb4kUcbuUTlMXyezFzZvw%3D%3D |
oauth_signature_method | リクエストを署名するために使われたメソッド 例 : RSA-SHA1 |
oauth_timestamp | タイムスタンプ 例 : 1348045323 |
oauth_version | 署名に用いられたOAuathのバージョン 例 : 1.0 |
opensocial_app_id | アプリケーションID |
opensocial_owner_id | アプリを登録しているユーザのID (※) |
opensocial_viewer_id | アプリを実行しているユーザのID (※) |
xoauth_signature_publickey | リクエストを署名するために使われた公開鍵の名前 例 : app_touch_20120306 |
hoge | appParamsで指定されたその他のパラメーター 例 : fuga |
※ opensocial_owner_id と opensocial_viewer_id は、ユーザ認可で r_profile を取得している場合にのみ付与されます。ユーザ認可についてはユーザ認可についての項目をご参照ください。
また、Graph API方式のmixiアプリでは、opensocial_owner_id と opensocial_viewer_id は常に同一の値となります。
アプリ起動時と同様に、署名の検証を行ってください。
起動時のパラメータとOAuth Signatureの検証
これでCookieの設定/読み出しが行えるようになりました。