iOS および macOS 用のMicrosoft Authentication Library (MSAL) がユーザーをサインインさせるか、トークンを更新すると、キーチェーンにトークンをキャッシュしようとします。 キーチェーン内のトークンをキャッシュすると、MSAL は、同じ Apple 開発者によって配布される複数のアプリ間でサイレント シングル サインオン (SSO) を提供できます。 SSO は、キーチェーン アクセス グループ機能を使用して実現されます。 詳細については、Apple の キーチェーン アイテムに関するドキュメントを参照してください。
この記事では、MSAL がキャッシュされたトークンを iOS および macOS キーチェーンに書き込むことができるようにアプリの権利を構成する方法について説明します。
既定のキーチェーン アクセス グループ
iOS
iOS 上の MSAL では、既定で com.microsoft.adalcache アクセス グループが使用されます。 これにより、同じ発行元の複数のアプリ間で最高の SSO エクスペリエンスが保証されます。
iOS では、Xcode の プロジェクト設定>Capabilities>Keychain Sharing で、com.microsoft.adalcacheキーチェーングループをアプリのエンタイトルメントに追加します。
macOS
macOS 上の MSAL では、既定でアクセス グループ com.microsoft.identity.universalstorage 使用されます。
macOS では、iOS と同様に、Project settings>Capabilities>Keychain Sharing の Xcode 上で、アプリのエンタイトルメントに com.microsoft.identity.universalstorage キーチェーングループを追加します。
カスタム キーチェーン アクセス グループ
別のキーチェーン アクセス グループを使用する場合は、次のように、MSALPublicClientApplicationConfigを作成する前に、MSALPublicClientApplicationを作成するときにカスタム グループを渡すことができます。
MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"your-client-id"
redirectUri:@"your-redirect-uri"
authority:nil];
config.cacheConfig.keychainSharingGroup = @"custom-group";
MSALPublicClientApplication *application = [[MSALPublicClientApplication alloc] initWithConfiguration:config error:nil];
// Now call `acquiretoken`.
// Tokens will be saved into the "custom-group" access group
// and only shared with other applications declaring the same access group
キーチェーン共有を無効にする
複数のアプリ間で SSO 状態を共有しない場合、またはキーチェーン アクセス グループを使用しない場合は、キーチェーン グループとしてアプリケーション バンドル ID を渡してキーチェーン共有を無効にします。
config.cacheConfig.keychainSharingGroup = [[NSBundle mainBundle] bundleIdentifier];
-34018 エラーを処理する (項目をキーチェーンに設定できませんでした)
エラー -34018 は、通常、キーチェーンが正しく構成されていないことを意味します。 MSAL で構成されているキーチェーン アクセス グループが、エンタイトルメントで構成されているキーチェーン アクセス グループと一致していることを確認します。
アプリケーションが正しく署名されていることを確認する
macOS では、開発者が署名しなくてもアプリケーションを実行できます。 MSAL のほとんどの機能は引き続き機能しますが、キーチェーン アクセスによる SSO ではアプリケーションに署名する必要があります。 複数のキーチェーン プロンプトが表示される場合は、アプリケーションの署名が有効であることを確認してください。
次のステップ
キーチェーン アクセス グループの詳細については、Apple の 「アプリのコレクション間でのキーチェーン項目へのアクセスの共有 」の記事を参照してください。