App Storeの新ガイドラインのためにSign In with Apple のトークン無効化に対応した話

Sign In with Apple を使用している iOS アプリではトークンの無効化をしましょう。
2022.07.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

 

prismatix事業部の宮部です。

私は prismatix 認証サービス という OpenID Connect と OAuth2.0 に準拠したID製品の開発をおこなっているわけですが、 prismatix 認証サービス 自身が他のIdPを使ってソーシャルログインを行うことも可能になっています。

今回はその機能の一環で対応した Sign In with Apple についての記事になります。

 

App Store レビューガイドラインの改訂

先日、アカウントの削除機能に関する要件の適用が6月30日開始というアナウンスが Apple社からありました。

アカウントの作成が必要なアプリの場合はアプリ内に退会機能が必要なことや、アカウントに紐づくデータの削除をしなければならないなどの事項が記載されていますが、今回はその中で

Appleでサインインに対応したAppでは、AppleでサインインのREST APIを使用して、アカウントの削除時にユーザーのトークンを無効化する必要があること。

という部分に注目して何を行ったのかを書いていきます。

今回は上記のアナウンスページから該当の API のリファレンスまでを掘り進めていく形式で記載していくとなかなか辿り着けなかったため、本丸に一気飛びしましょう。

 

Revoke Tokens

 

使用する API は Revoke tokens というものになっており、 Sign In with Apple (SIWA) で受け取った アクセストークンやリフレッシュトークンを無効化する API になっています。

このエンドポイントにクライアント ID、クライアントシークレット、トークン、アクセストークンなのかリフレッシュトークンなのかの識別子(任意)を送信すると、そのトークンが無効化されます。

 

今回はリフレッシュトークンを無効化します。以下はCurlで行う例です。

curl -X POST https://appleid.apple.com/auth/revoke \
-H content-type: application/x-www-form-urlencoded \
-d client_id=CLIENT_ID \
-d client_secret=CLIENT_SECRET \
-d token=REFRESH_TOKEN \
-d token_type_hint=refresh_token

このエンドポイントの特徴として、トークンの無効化に成功した場合だけでなく、既に無効になっているトークンを使って API を叩いた場合もレスポンスとして HTTP ステータスは200を返します。

トークンが無効化された場合、そのトークンを使って API を利用できないことはもちろん、iPhone の場合

設定 > Apple ID > パスワードとセキュリティ > Apple ID を使用中の App

のリストの中から SIWA を利用していたアプリが消えているのが確認できると思います。

 

まとめ

Sign In with Apple を使用している iOS アプリは退会時にリフレッシュトークンの無効化を行なっていない場合、2022年6月30日以降のアプリ更新で審査プロセスを合格できない可能性があります。

上記の対応が行われているか、今一度確認をしてみましょう。

 

最後に

prismtatixでは、認証・認可・ユーザー管理基盤開発エンジニアを募集しています。

昨今のサービスには必要不可欠な認証認可について一緒に考え、プロダクトを育ててくれる方を探しています。

少しでもご興味をお持ちいただけましたら、ぜひご応募ください。 お待ちしています。