任天堂の新APIの仕様解説

プログラミング

背景

書けと言われたので書きます。

iksm_session取得までの流れ

大まかに分けて二つのパートに分かれるので、分けて解説。

access_token取得までの流れ

access_token取得まで

api/tokenにアクセスするとユーザ情報が返ってくるのだが、その中にaccess_tokenとid_tokenが存在する。

旧仕様ではid_tokenを使用して認証していたのだが、何故か1.6.1.2からは任天堂はaccess_tokenを使用するように変更しています。

なので、少なくともiksm_sessionを取得するにあたって、api/tokenからのレスポンスのうちid_tokenについては全く使用しません。

面倒なのがauth_codeなどを使って認証用のURLを作る作業なのですが、それを代替するサーバを立てているのでぜひご利用ください。

flapg API nso

iksm_session取得にはfという値が必要なのですが、それを生成するのがflapg APIです。

途中でユーザ情報取得のために/users/meにアクセスしていますが、実はこの作業は不要です。

country, birthday, languageには適当な値を代入すればよく、その手法を使っているのがikaWidget2です。

guidもランダムな値でよく、timestampも厳密である必要はありません。

flapg API app

ここが新APIの骨子で、fの値を二回生成するようになりました。

一度目はsplatoon_tokenを生成するために使用し、二度目はsplatoon_access_tokenのために使用します。

こんな大幅な変更があったのにどうやってikaWidget2がアプリのアップデートなしに対応したのか不思議で仕方ないです。

で、最終的にsplatoon_access_tokenがあればiksm_sessionが生成できるというわけですね!

正確に言えば、splatoon_access_tokenを使ってページにアクセスするとcookieとしてiksm_sessionが設定されているのでそれをパクってくることになります。

まとめ

で、見ればわかるのですが、最初のログイン画面からsession_token_codeを取得すれば実は残りの部分は全部サーバサイドで行えます。

なので、session_token_codeをPOSTしてすればiksm_sessionが返ってくるAPIというのは実装可能です。

が、それは結局セッションキー生成のための本来秘匿にすべきコードを任天堂以外のサーバに投げているということになるのでセッションハイジャックの危険性があります。こんな実装をしてはいけません。

コメント

タイトルとURLをコピーしました