7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sign in with Apple 連携メモ

Last updated at Posted at 2020-12-13
  • 既存アプリでSign in with Appleを導入する際の開発要素などをメモする。

大まかな処理の流れ

  1. クライアントアプリは、Apple の認可要求エンドポイントでSign in with Apple認証を行い、認可コードを取得する。
  2. バックエンドアプリは、クライアントアプリから受け取った認可コードを受け取る。
  3. バックエンドアプリは、認可コードとクライアントシークレットを指定してApple Tokenエンドポイントにリクエストし、IDトークンを発行する。
  4. バックエンドアプリは、IDトークンを検証する。検証に成功した場合、ログイン成功とする。

シーケンス参考資料

開発事前作業

  • 公式を参考に、開発に必要な情報の登録/発行をApple Developersで行う。
    • Service IDの登録(認可要求リクエストのclinet_idに指定)
    • アプリドメインの登録(認可コードのリダイレクト先(redirect_uri)を指定)
    • Keyの発行(トークンリクエスト時に指定するclient_secret JWT生成に利用)

開発要素

Appleサインインボタンの配置

  • 公式からダウンロードする。
  • ガイドライン に従って、サイズ、カラーをクエリパラメータで指定して利用する。

認可要求リクエスト (サインインページへのアクセス)

  • https://appleid.apple.com/auth/authorizeに以下のパラメータをクエリパラメータとして指定し、リクエストする。
    • 例:https://appleid.apple.com/auth/authorize?client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&response_type=[RESPONSE_TYPE]&scope=[SCOPES]&response_mode=[RESPONSE_MODE]&state=[STATE]

パラメータ

パラメータ名 必須/任意 説明
client_id 必須 クライアント識別子
redirect_uri 必須 リダイレクトURI。ローカルホストやIPアドレス指定不可。
response_type 必須 codeid_tokenから選択(両方指定も可能)。 id_token 指定の場合は、response_modefragmentform_postで指定する必要がある。
scope 任意 Appleから要求されたユーザー情報の範囲。 nameemail。複数指定の場合は、スペース区切りをエンドコーディングして指定。例: "scope=name%20email".
response_mode 任意 レスポンスの形式を指定。 queryfragmentform_postの中から指定する。
state 任意 ステート。CSRF対策用文字列。
nonce 任意 IDトークンとクライアントセッションを紐づけるための文字列。リプレイ攻撃対策用。

Tokenエンドポイント リクエスト/レスポンス検証

リクエスト

  • Apple トークンエンドポイントにリクエストし、アクセストークントークンの発行を行う。

    POST https://appleid.apple.com/auth/token
    

パラメータ

パラメータ名 必須/任意 説明
client_id 必須 クライアント識別子。
client_secret 必須 Apple Developers で生成した鍵を使用し、生成したJWT。
code 必須 認可コード。認可コード検証時は指定。
grant_type authorization_codeを指定。リフレッシュトークン検証時はrefresh_tokenを指定。
redirect_uri リダイレクトURI。認可要求リクエスト時に指定した値。

レスポンス検証

  • レスポンス
パラメータ 説明
access_token アクセストークン。リソースアクセスに利用。
expires_in アクセストークン有効期限。秒。
id_token IDトークン。ユーザー情報のJWT。
refresh_token リフレッシュトークン。アクセストークン再発行に利用。
token_type アクセストークン種別。bearer
  • IDトークンの検証
    • 公式のIDトークン構成に従い、IDトークンの中身が期待通りの値か検証する。
      • IDトークン署名の検証には、公開鍵取得が必要。

参考情報

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?