リダイレクト URI の問題
MSAL は、既定でブローカー認証を使用するように構成されています。 これを機能させるには、アプリケーションに関連付けられている署名キーを使用してリダイレクト URI を作成する必要があります。 その後、リダイレクト URI は、アプリケーション構成ファイルと Android マニフェストの両方に含める必要があります。 残念ながら、それぞれに異なるエンコードが必要です。 簡単に見ていきましょう。
- 最初に行う必要があるのは、アプリケーションの署名キーを配置することです。 通常、デバッグ キーは、debug.keystore と呼ばれる Java キーストアの ".android" という隠しフォルダーの下にあるホーム フォルダーにあります。 Azure portal には、次のようにアプリケーションの署名を生成するための便利なコマンドが用意されています。
- Macos:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
- ウィンドウズ:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
警告:パイプコマンドの入出力が便利です。ただし、エラーが非表示になる可能性があります。 たとえば、キーストア ファイルが見つからない場合、エラー メッセージは openssl にパイプ処理され、完全なコマンドによって期待どおりの結果が得られます。 疑わしい場合は、最初のコマンドを個別に実行して動作していることを確認します。
警告: キーストアのパスワードを指定するように求められます。 デバッグ キーストアのパスワードは単に "android" です。 パスワードの入力を求められなかった場合は、キーストア ファイルが見つかったことを確認するために、上記のコマンドの一部を個別に実行する必要がある可能性があります。
警告: キーストア ファイルが別の場所にある場合は、
%HOMEPATH%\.android\debug.keystore(Windows) または~/.android/debug.keystore(MacOS) をキーストア ファイルへのパスに置き換える必要があります。
- base64 でエンコードされた署名を取得したら、 これを使用して、ブラウザーがアプリケーションに承認コードを正しく返すことができるように、アプリケーションのインテント フィルターを構成できます。 デバイス上でインテント フィルターを一意にするために、アプリケーションの署名に加えて、カスタム スキーム "msauth" とパッケージ名が含まれます。 次に例を示します。
//NOTE: the slash before your signature value added to the path attribute
//This uses the base64 encoded signature produced above.
<data android:scheme="msauth"
android:host="com.microsoft.identity.client.sample.local"
android:path="/1wIqXSqBj7w+h11ZifsnqwgyKrY="/>
- msal 構成ファイルには、少し異なるものが必要です。 既に base64 でエンコードされているだけでなく、署名値を URL でエンコードする必要があります。 例を次に示します。
//NOTE that the signature part of the uri has been url encoded. In this example. The "+" character and the "=" character are affected.
"redirect_uri" : "msauth://com.microsoft.identity.client.sample.local/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
アセンブリされたアプリのリダイレクト URI 構成を表示する
アプリ登録の作成 (またはトラブルシューティング) を支援するために、リダイレクト URI に関する問題の構成と診断に役立つヘルパー関数を PublicClientApplicationに追加し、リダイレクト Activityを追加しました。
MSAL 2.0.0 以降では、次のメソッドを呼び出して、アプリケーションの推奨される構成を出力できます。
// From any Activity in your app, call this static method
PublicClientApplication.showExpectedMsalRedirectUriInfo(MyActivity.this);