Apple ID 認証
Overview
Apple ID 認証プロバイダーは、ユーザーが Apple でサインイン を通じて Apple ID 認証情報でログインすることを可能にします。 。この認証方法では、業界標準の OAuth2 が使用されます。0認可プロトコルを使用しています。
ユーザーが Sign in with Apple を通じて正常にログインすると、Apple により Apple ID プロバイダーがユーザーを認証するために使用する JSON Web Token などの認証情報オブジェクトが返されます。ユーザーがアプリに対して権限を付与していれば、ユーザーの名前とメールアドレスが認証情報オブジェクトに含まれる場合があります。
「Apple でサインイン」の実装方法の詳細については、以下をご覧ください。
Sign in with Apple の公式ドキュメント(Apple Developer Portal)
WWDC 2019 の Apple でサインインのご紹介 セッション
関連する 参照アプリケーション 。
注意
Apple ID 認証を使用する iOS アプリは、iOS 13 以降を対象としている必要があります。
次の図は、OAuth ロジック フローを示しています。
必要なもの
Apple ID 認証を実装するには、次のものが必要です。
有効な Apple Developer Program アカウント
Xcode 11 以降
Apple ID 認証の設定
Atlas App Services で「Apple でサインイン」を使用する場合、Apple 認証プロバイダをモバイル アプリケーションまたはウェブ アプリケーションのいずれかに設定できます。
Sign in with Apple を両方で使用する場合は、ウェブまたはモバイル アプリのどちらかに Sign in with Apple の独自手動フローを設定した後に、返された JWT をカスタム JWT 認証プロバイダーを通じて使用します。Realm SDK では、各認証プロバイダーのユーザー ID を 1 人のユーザーにリンクできます。
ウェブ アプリケーションまたはモバイル アプリケーションのみで「Apple でサインイン」を使用するには、アプリケーションの種類を選択し、このガイドに従ってください。
Apple でサインインをアプリに追加
この機能を使用するには、アプリが Appleでサインインの権限を持っている必要があります。
Xcode でアプリのターゲットを選択します。
[Signing & Capabilities] タブに移動して、[+ Capability] をクリックします。
Sign in with Apple(Appleでサインイン)機能を検索し、選択します。
次に、Apple Developer Portal で有効になっていることを確認します。
Apple Developer Portal の Certificates, Identifiers and Profiles ページに移動します。
ドロップダウンからアプリの ID を選択します。そうすると、[App ID Configuration] ペインが表示されます。
[Sign In with Apple] のチェックボックスが表示されるまで下にスクロールします。チェックボックスが選択されていない場合は、選択します。変更を加えた場合は、[Save] ボタンを押します。
アプリの Bundle ID を書き留めておきます。Bundle ID は、クライアントシークレットを作成するときと、Atlas App Services で Apple でサインインを設定するときに必要になります。
秘密キーの作成
Apple でサインインのクライアントシークレットは、 秘密キーを使用して作成、署名する JSON Web Token です。Apple Developer Portal で秘密キーを生成する必要があります。
左側のナビゲーション メニューで [ Keysをクリックします。
[Keys] の横にある青いプラスアイコンをクリックします。
[Register a New Key] ページで、わかりやすい [Key Name] を入力し、下にスクロールして [Sign in with Apple] の行を見つけます。[Sign in with Apple(Appleでサインイン)] のチェックボックスをオンにして機能を有効にし、[Configure] をクリックします。
[Configure Key] ページで、アプリのアプリケーションID を [Primary App ID] として選択し、[Save] をクリックします。
[Continue] をクリックして、キーの設定を確認します。キーが正しく設定されたことを確認したら、[Register] をクリックします。
後でアクセスできるように Key ID の値をコピーし、[Download] をクリックしてキーを
.p8
テキスト ファイルとしてダウンロードします。この値とテキスト ファイルを、クライアントシークレットの生成に使用します。重要
キーの保存
キーは 1 回だけダウンロードできます。再度必要になった場合に備えて、キーを安全な場所に保存しておいてください。キーを紛失した場合は、新しいキーを生成する必要があります。
クライアント シークレット JWT の作成
Apple ID 認証プロバイダーのクライアント シークレット JWT を作成できるようになりました。次の情報があることを確認してください。
アプリの Bundle ID。これを以下のスクリプトの
client_id
として使用します。作成したキーの Key ID と、そのキーを含む
.p8
ファイル。あなたの Apple チーム ID。これは、Apple Developer Portal の右上にあります。
必要な情報がすべて揃っていることを確認したら、スクリプトを使用して JWT を生成できます。独自のスクリプトを定義することも、このステップのスクリプトを使用することもできます。
JWT を生成するには、JWT gem を使用します。JWT gem をインストールするには、次のコマンドを実行します。
gem install jwt
generate_client_secret.rb
という新しいファイルを作成し、次のコード ブロックをファイルにコピーします。
# Source: https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple require 'jwt' # Update these values with your app's information team_id = '<Apple Team ID>' client_id = '<Bundle ID or Services ID>' key_id = '<Apple Key ID>' key_file = '<Key File Path>' # Define the JWT's headers and claims headers = { # The token must be signed with your key 'kid' => key_id } claims = { # The token is issued by your Apple team 'iss' => team_id, # The token applies to Apple ID authentication 'aud' => 'https://appleid.apple.com', # The token is scoped to your application 'sub' => client_id, # The token is valid immediately 'iat' => Time.now.to_i, # The token expires in 6 months (maximum allowed) 'exp' => Time.now.to_i + 86400*180, } # Read in the key and generate the JWT ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file token = JWT.encode claims, ecdsa_key, 'ES256', headers # Print the JWT to stdout puts token
team_id
、client_id
、key_id
、key_file
の値をアプリケーションの情報と一致するように更新し、ファイルを保存します。JWT を生成する準備ができたら、シェルでスクリプトを実行します。
ruby generate_client_secret.rb >> client_secret.txt
重要
JWT の保存
generate_client_secret.rb
スクリプトは stdout に出力されます。これを呼び出すと、stdout が client_secret.txt
というファイルに追加されます。Atlas App Services で Apple ID プロバイダーを構成するには、JWT が必要になります。
Atlas App Services でのプロバイダーの設定
この時点で、Apple アプリケーションを設定し、必要な OAuth 2.0 の認証情報を生成しました。これで、Atlas App Services クライアント アプリケーション ユーザーがログインできるように、Apple ID 認証プロバイダーを設定できます。
左側のナビゲーション メニューで [Authentication] をクリックし、次に [Apple ID] をクリックします。
[Provider Enabled] トグルをオンにします。
App Services Client ID には、アプリケーションの Bundle ID を入力します。
Client Secret には、わかりやすい名前で新しいシークレットを作成し、[Client Secret Value] に生成した JWT 文字列を設定します。あるいは、JWT を含む既存のシークレットを選択することもできます。
[Save] をクリックしてプロバイダーの設定を終了します。プロバイダーをクライアントアプリケーションで使用できるようにするには、変更を配置する必要があります。[Review & Deploy Changes] をクリックし、[Deploy] をクリックします。
appservices を使用して Apple 認証プロバイダーの有効化と構成を行うには、/auth/providers.json
でそのための構成オブジェクトを定義します。
Apple プロバイダーの構成は次の形式になります。
{ "oauth2-apple": { "name": "oauth2-apple", "type": "oauth2-apple", "disabled": <boolean>, "config": { "clientId": "<Bundle ID>" }, "secret_config": { "clientSecret": "<Secret Name>" }, "redirect_uris": ["<string>", ...] } }
フィールド | 説明 |
---|---|
Client ID config.clientId | 必須。アプリケーションの Bundle ID |
Client Secret secret_config.clientSecret | 必須。生成した Client Secret JWT を保存するシークレットの名前 |
Redirect URIs redirect_uris | ウェブ アプリケーションの場合は必須です。モバイル アプリケーションの場合は必須ではありません。 |
構成ファイルを作成したら、アプリケーションをデプロイすることで、Apple ID 認証プロバイダーをクライアントアプリケーションで利用できるようになります。
App Services CLI を使用してドラフト アプリケーションを配置する方法は次の通りです。
appservices push
GitHub 自動デプロイを使用して、ドラフト アプリケーションを配置する方法は次の通りです。
git add ./auth/providers.json git commit -m "Configure and Enable Apple ID Authentication" git push origin <branch name>
アプリ ID の作成
Apple の App ID はユーザーのアプリケーションを表します。また、App ID を使用して Sign in with Apple などのサービスにアクセスできます。Apple ID プロバイダーを構成するには、新しい App ID を作成する必要があります。
Apple Developer Portal の Certificates, Identifiers and Profiles ページに移動します。
左側のナビゲーション メニューで [ Identifiersをクリックします。
[Identifiers] の横にある青いプラスアイコンをクリックします。
Register a New Identifier ページで、[App IDs]、[Continue] の順にクリックします。
Register an App ID ページでアプリを実行する Platform を選択した後、簡単な Description と逆 DNS 表記 Bundle ID を入力します。
「Sign in with Apple」の機能が表示されるまで、「Register an App ID」 ページを下にスクロールします。チェックボックスをオンにすると、この機能が有効になります。
ページ上部の [Continue] ボタンを押します。アプリに適用されるその他の設定手順を完了し、[Register] ボタンを押します。
サービス ID の作成
Apple Services ID は、1つのアプリケーションを表しており、これにより承認コールバック URL を設定し、アプリケーションの秘密キーを定義できます。
左側のナビゲーション メニューで [ Identifiersをクリックします。
[Identifiers] の横にある青いプラスアイコンをクリックします。
Register a New Identifier ページで、[Services IDs]、[Continue] の順にクリックします。
「Register a Services ID」ページでの、簡単なDescription と逆 DNS 表記 Identifier の入力。
重要
識別子の保存
サービス ID のIdentifier値は、アプリケーションのClient IDです。この値は、後でAtlas App Services で Apple ID プロバイダーを設定する際に必要になります。
[Continue] ボタンを押します。詳細を確認し、[Register] をクリックします。
作成したサービスをクリックします。チェックボックスをオンにして [Sign in with Apple] を有効にし、[Configure] をクリックします。作成したアプリケーション ID を Primary App ID として選択します。
サービス ID のドメイン、サブドメイン、リターン URL を入力します。[Next] ボタンを押します。
[Continue] をクリックし、[Save] をクリックします。サービス ID が正しく設定されていることを確認して、[Register] をクリックします。
秘密キーの作成
Apple でサインインのクライアントシークレットは、 秘密キーを使用して作成、署名する JSON Web Token です。Apple Developer Portal で秘密キーを生成する必要があります。
左側のナビゲーション メニューで [ Keysをクリックします。
[Keys] の横にある青いプラスアイコンをクリックします。
[Register a New Key] ページで、わかりやすい [Key Name] を入力し、下にスクロールして [Sign in with Apple] の行を見つけます。[Sign in with Apple(Appleでサインイン)] のチェックボックスをオンにして機能を有効にし、[Configure] をクリックします。
「Configure Key」ページで、「 Primary App ID」として作成したアプリ ID を選択し、[ Save] をクリックします。
[Continue] をクリックして、キーの設定を確認します。キーが正しく設定されたことを確認したら、[Register] をクリックします。
後でアクセスできるように Key ID の値をコピーし、[Download] をクリックしてキーを
.p8
テキストファイルとしてダウンロードします。これらはクライアントシークレットの生成に使用します。重要
キーの保存
キーは 1 回だけダウンロードできます。再度必要になった場合に備えて、キーを安全な場所に保存しておいてください。キーを紛失した場合は、新しいキーを生成する必要があります。
クライアント シークレット JWT の作成
Apple ID 認証プロバイダーのクライアント シークレット JWT を作成できるようになりました。次の情報があることを確認してください。
作成された Services ID。これを以下のスクリプトの
client_id
として使用します。- 作成したキーの Key ID とキーを含む
.p8
- ファイル。
- 作成したキーの Key ID とキーを含む
- あなたの Apple チーム ID。これは Apple Developer Portal の
- 右上にあります。
必要な情報がすべて揃っていることを確認したら、スクリプトを使用して JWT を生成できます。独自のスクリプトを定義することも、このステップのスクリプトを使用することもできます。
JWT を生成するには、JWT gem を使用します。JWT gem をインストールするには、次のコマンドを実行します。
gem install jwt
generate_client_secret.rb
という新しいファイルを作成し、次のコード ブロックをファイルにコピーします。
# Source: https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple require 'jwt' # Update these values with your app's information team_id = '<Apple Team ID>' client_id = '<Bundle ID or Services ID>' key_id = '<Apple Key ID>' key_file = '<Key File Path>' # Define the JWT's headers and claims headers = { # The token must be signed with your key 'kid' => key_id } claims = { # The token is issued by your Apple team 'iss' => team_id, # The token applies to Apple ID authentication 'aud' => 'https://appleid.apple.com', # The token is scoped to your application 'sub' => client_id, # The token is valid immediately 'iat' => Time.now.to_i, # The token expires in 6 months (maximum allowed) 'exp' => Time.now.to_i + 86400*180, } # Read in the key and generate the JWT ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file token = JWT.encode claims, ecdsa_key, 'ES256', headers # Print the JWT to stdout puts token
team_id
、client_id
、key_id
、key_file
の値をアプリケーションの情報と一致するように更新し、ファイルを保存します。JWT を生成する準備ができたら、シェルでスクリプトを実行します。
ruby generate_client_secret.rb >> client_secret.txt
重要
JWT の保存
generate_client_secret.rb
スクリプトは stdout に出力されます。これを呼び出すと、stdout が client_secret.txt
というファイルに追加されます。Atlas App Services で Apple ID プロバイダーを構成するには、JWT が必要になります。
Atlas App Services でのプロバイダーの設定
この時点で、Apple アプリケーションを設定し、必要な OAuth 2.0 の認証情報を生成しました。これで、Atlas App Services クライアント アプリケーション ユーザーがログインできるように、Apple ID 認証プロバイダーを設定できます。
左側のナビゲーション メニューで [Authentication] をクリックし、次に [Apple ID] をクリックします。
[Provider Enabled] トグルをオンにします。
Atlas App Services Client ID には、上記の手順 2 でServices IDを作成したときに取得した Apple Services IDを入力します。
Client Secret には、わかりやすい名前で新しいシークレットを作成し、[Client Secret Value] に生成した JWT 文字列を設定します。あるいは、JWT を含む既存のシークレットを選択することもできます。
Redirect URIsの場合は、[Add Redirect URI] をクリックし、OAuth プロセスが完了したら Atlas App Services がリダイレクトする URL を入力します。管理するドメインの URL を入力し、ユニバーサル リンクを使用して、ユーザーをアプリにリダイレクトします。
[Save] をクリックしてプロバイダーの設定を終了します。プロバイダーをクライアントアプリケーションで使用できるようにするには、変更を配置する必要があります。[Review & Deploy Changes] をクリックし、[Deploy] をクリックします。
appservices
を使用して Apple 認証プロバイダーを有効にして設定するには、 /auth/providers.json
でその構成オブジェクトを定義します。
Apple プロバイダーの構成は次の形式になります。
{ "oauth2-apple": { "name": "oauth2-apple", "type": "oauth2-apple", "disabled": <boolean>, "config": { "clientId": "<Apple Services ID>" }, "secret_config": { "clientSecret": "<Secret Name>" }, "redirect_uris": ["<string>", ...] } }
フィールド | 説明 |
---|---|
Client ID config.clientId | 必須。上記の手順 2 を完了したときに作成した Apple Services ID。 |
Client Secret secret_config.clientSecret | 必須。生成した Client Secret JWT を保存するシークレットの名前 |
Redirect URIs redirect_uris | Web アプリケーションに必要です。許可されたリダイレクト URIのリスト。 ユーザーが認証プロセスを完了すると、App Services は、指定されたリダイレクト URI、またはリダイレクト URI が指定されていない場合は、ユーザーが認証リクエストを開始した URL のいずれかにリダイレクトします。Atlas App Services は、プロトコルと後続のスラッシュすべてを含め、このリストのエントリと完全に一致する URI にのみユーザーをリダイレクトします。 管理するドメインの URL を入力し、ユニバーサルリンクを使用して、ユーザーをアプリにリダイレクトします。 |
構成ファイルを作成したら、アプリケーションをデプロイすることで、Apple ID 認証プロバイダーをクライアントアプリケーションで利用できるようになります。
App Services CLI を使用してドラフト アプリケーションを配置する方法は次の通りです。
appservices push
GitHub 自動デプロイを使用して、ドラフト アプリケーションを配置する方法は次の通りです。
git add ./auth/providers.json git commit -m "Configure and Enable Apple ID Authentication" git push origin <branch name>
例
Apple 認証を使用した登録とログインの方法を示すコード例については、Realm SDK のドキュメントを参照してください。