この記事では、ユーザーが Google Play ストアに公開された Android アプリをインストールした後にサインイン中に発生する認証エラーの解決策について説明します。
現象
次のような状況で問題が発生します。
- Microsoft 認証ライブラリ (MSAL) を使用して、Android アプリに Microsoft Entra 認証を正常に実装しました。
- アプリはビルドされ、実行され、すべての QA テストに合格しました。
- アプリを Google Play ストアに公開します。
この場合、ユーザーがアプリをインストールした後、アプリにサインインしても認証は機能しません。
認証エラー メッセージをユーザーに公開する場合、またはチームにエラー メッセージを送信させる場合は、次のテキストのようなエラー メッセージが表示されることがあります。
構成ファイル内のリダイレクト URI が、パッケージ名と署名ハッシュで生成されたリダイレクト URI と一致しません。 構成ファイルの URI と Azure portal でのアプリの登録を確認してください。
この問題のもう 1 つの考えられるシナリオは次のとおりです。
開発と QA のテスト中に、サポートされているブローカーを使用して認証とシングル サインオン (SSO) を処理するようにアプリを設定します。 ただし、アプリが Google Play 経由で展開されてインストールされた後、アプリは認証にブローカーを使用しなくなります。
原因
Android アプリケーションをデバイスにインストールするためにビルドすると、APK 圧縮パッケージとしてビルドされ、証明書によって署名されます。 この証明書署名により、アプリケーションを構築したユーザーが秘密署名キーを所有しているユーザーであることが保証されます。 これにより、ハッカーは元の秘密キーでバージョンに署名できないため、アプリケーションに有害な変更を加えるのを防ぐことができます。
以前は、Android 開発者は秘密署名キーを所有し、維持しました。 現在、Google Play Services では Android 開発者向けの秘密署名キーが生成および維持されており、Google による安全なストレージが確保されています。 開発者は引き続きアップロード キーを保持しているため、Google Play Services はアップロードされたアプリ バンドルの信頼性を確認できますが、実際の署名はユーザーがデバイスにアプリをインストールするときに Google 所有の署名証明書によって実行されます。
Android ネイティブおよびMicrosoft サポート認証ブローカー用の MSAL は、認証時に Android オペレーティング システムと対話するときに、インストールされているアプリケーションのパブリック署名ハッシュを使用して識別します。
Google Play 経由でインストールされたアプリケーションの公開署名ハッシュは、Google Play に公開する前にインストールされたものとは異なります。 したがって、MSAL は正しくない署名ハッシュで構成されます。
ソリューション
この問題を解決するには、次の操作を行います。
- MSAL Package Inspector ツールを使用するか、Google Play コンソールから新しい署名ハッシュを取得。
- 新しい署名ハッシュを使用して、Azure portal のアプリ登録に新しいリダイレクト URI を追加。
- 新しいリダイレクト URI と署名ハッシュを使用するように、アプリケーション コード内の MSAL 構成を更新。
MSAL パッケージ インスペクター ツールまたは Google Play コンソールから新しい署名ハッシュを取得する
MSAL パッケージ インスペクター ツールを使用するか、Google Play コンソールから新しい署名ハッシュを取得できます。
MSAL パッケージ インスペクターをインストールして使用するには、MSAL Android ネイティブ ガイド Package Inspector を参照してください。
Google Play Console から署名ハッシュを取得するには、次の手順に従います。
Google Play コンソールに移動し、Google デベロッパー アカウントでサインインします。
Google Play コンソールにアクセスしたら、影響を受けるアプリを選択します。
左側のナビゲーションの [ Release カテゴリで、 Setup を展開し、 App Integrity を選択します。
[アプリケーション署名] タブを選択します。アプリ署名キーの指紋は、3 つの異なるバリエーションで表示されます。
SHA-1 証明書フィンガープリントをコピーし
$Thumbprint
変数の値として手順 6 の PowerShell スクリプトに貼り付けます。次のスクリプトを実行して、MSAL に必要な base64 でエンコードされた指紋を取得します。
$Thumbprint = "paste your fingerprint here" $Thumbprint = $Thumbprint.Replace(":", "") $Bytes = [byte[]]::new($Thumbprint.Length / 2) For($i=0; $i -lt $Thumbprint.Length; $i+=2){ $Bytes[$i/2] = [convert]::ToByte($Thumbprint.Substring($i, 2), 16) } $hashedString =[Convert]::ToBase64String($Bytes) Write-Host $hashedString
新しい署名ハッシュを使用して、Azure portal のアプリ登録に新しいリダイレクト URI を追加する
注:
既存のリダイレクト URI を変更するのではなく、新しいリダイレクト URI を追加することをお勧めします。 アプリの登録には、多くのリダイレクト URI を含めることができます。 さらに、既存のリダイレクト URI を変更すると、アプリの開発バージョンに問題が発生する可能性があります。 これにより、トラブルシューティングや開発の更新などの間に問題が発生する可能性があります。
Azure portal にサインインし、アプリの登録 ページに移動します。
Android アプリのアプリ登録を選択します。
[管理] で、 [認証] を選択します。
[プラットフォーム構成] で [プラットフォームを追加] を選択します。
[プラットフォームの構成] でAndroidを選択します。
Android アプリのパッケージ名を入力します。 また、署名ハッシュを生成して入力します。
注:
署名ハッシュが異なる限り、複数の Android リダイレクト URI で同じパッケージ名を使用しても問題ありません。
[構成する] を選択して、プラットフォームの構成を完了します。
新しいリダイレクト URI と署名ハッシュを使用するように、アプリケーション コード内の MSAL 構成を更新します
アプリケーション コードで MSAL 構成ファイルと Android マニフェスト ファイルを更新します。
MSAL 構成ファイル:
リダイレクト URI のみを変更します。 Azure portal から直接コピーして貼り付けます。 Azure portal では、リダイレクト URI の署名ハッシュ部分は HTTP エンコードされます。 HTTP エンコードされたままになります。
{ "client_id": "<Client ID>", "authorization_user_agent": "DEFAULT", "redirect_uri": "<Redirect URI>" "broker_redirect_uri_registered": true, "authorities": [ { "types": "AAD", "audience": { "type": "AzureADMyOrg", "tenant_id": "<Tenant ID>" } } ], "logging":{ "log_level": "VERBOSE", "logcat_enabled": true } }
Android マニフェスト ファイル:
android:path
アクティビティのcom.microsoft.identity.client.BrowserTabActivity
プロパティのみを変更します。 署名ハッシュをこのプロパティの値として貼り付けます。<activity android:name="com.microsoft.identity.client.BrowserTabActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:schema="msauth" android:host="com.example.azureauthsso1" android:path="android_path" /> </intent-filter> </activity>
注:
- 署名ハッシュの前にスラッシュを必ず含めます。
- リダイレクト URI とは異なり、ここでの署名ハッシュは HTTP エンコードされません。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。