目的
iOSでリモートプッシュ通知を実装する際、APNSサーバー(Appleのプッシュ通知サーバー)にリクエストを送るための認証処理で苦労したので、その時に役立ったツールを紹介します。この記事は備忘録を兼ねており、同じ問題に直面している方々にとっても参考になれば幸いです。
APNSサーバーでの認証について
リモートプッシュ通知を送るためには、APNSというAppleのサーバーに対してHTTPSリクエストを送る必要がありますが、リクエストがどのアプリのものかを識別するため、認証が必要です。不正なリクエストやなりすましを防ぐためにも重要なステップです。
Appleが提供している認証方法は以下の2つです:
この記事では、トークンベースの認証に関して役立つツールを紹介します。
リモートプッシュ通知の全体的な仕組みについては、以下の記事が非常に分かりやすいので参考にしてください。
トークンベースの認証でのサーバー実装で困ったこと
Appleのドキュメント通りにJWTトークンを生成しましたが、生成されたトークンが正しく有効であるかを確認する方法が分からず、APNSに正しくリクエストを通すのに苦労しました。以下にJWT生成に関するAppleのドキュメントを参考として貼っておきます。
参考までに実際に実装したサーバーのリポジトリが以下になります。
JWTトークンのバリデーションツール
本記事の主題である、JWTトークンの検証に役立つツールを紹介します。Appleが公式に提供しているもので、簡単に使用できます。以下の手順を参考にしてください。
①Xcodeにて対象のTARGETのPushNotificationのcapabilityからPush Notification Console
ボタンを押下します。
②Apple Developerのサインインが完了すると下記画面が表示されます。
右上の赤枠箇所が意図したBundle IDになっていることを確認して、上部タブのToolsボタンを押下します。
③JWT Validatorという画面があるので、そこで赤枠のボックスに生成したJWTトークンを入力すると検証してくれます。
④検証に失敗した例として、以下のようになります。
ここでは"iat"が古いと言われているので、"iat"の時間を現在時刻にすることで検証が成功します。
検証が成功した場合は緑色のチェックマークが表示されるはずです。
上記手順でJWTトークンの検証が手軽に行えました!
おわり
以上がAPNSサーバーの認証処理を実装するときに役立ったツールの紹介でした。
今回はJWTトークンのバリデーションツールの紹介でしたが、上記キャプチャの画面にもある通りJWTの生成やDevice Tokenのバリデーションツールも同梱されているので、今後こちらも機会があれば使用してみたいです。