MSAL を使用して Android でアプリ間 SSO を有効にする

シングル サインオン (SSO) を使用すると、ユーザーは資格情報を 1 回だけ入力でき、これらの資格情報はアプリケーション間で自動的に機能します。 ユーザーが管理する必要があるパスワードの数を減らし、パスワードの疲労や関連する脆弱性のリスクを軽減することで、ユーザー エクスペリエンスが向上し、セキュリティが向上します。

Microsoft ID プラットフォームとMicrosoft Authentication Library (MSAL) は、一連のアプリケーションで SSO を有効にするのに役立ちます。 Broker 機能を有効にすると、デバイス全体で SSO を拡張できます。

このハウツーでは、アプリケーションで使用されるソフトウェア開発キット (SDK) を構成して、顧客に SSO を提供する方法について説明します。

前提条件

このハウツーでは、次の方法を知っていると想定しています。

SSO の方法

MSAL for Android を使用するアプリケーションで SSO を実現するには、次の 2 つの方法があります。

  • ブローカー アプリケーションを使用する

  • システム ブラウザーを使用する

    デバイス全体の SSO、アカウント管理、条件付きアクセスなどの利点を得るために、ブローカー アプリケーションを使用することをお勧めします。 ただし、ユーザーは追加のアプリケーションをダウンロードする必要があります。

ブローカー認証による SSO

Microsoftのいずれかの認証ブローカーを使用して、デバイス全体の SSO に参加し、組織の条件付きアクセス ポリシーを満たすことをお勧めします。 ブローカーとの統合には、次の利点があります。

  • デバイス SSO
  • 条件付きアクセス:
    • Intune App Protection
    • デバイス登録 (職場への参加)
    • モバイル デバイス管理
  • デバイス全体のアカウント管理
    • Android AccountManager を使用してアカウント設定
    • "職場アカウント" - カスタム アカウントの種類

Android では、Microsoft認証ブローカーは、Microsoft AuthenticatorIntune ポータル サイト、および Windows アプリへのリンクに含まれるコンポーネントです。

次の図は、アプリ、MSAL、およびMicrosoftの認証ブローカー間の関係を示しています。

アプリケーションが MSAL、ブローカー アプリ、Android アカウント マネージャーにどのように関連しているかを示す図。

ブローカーをホストするアプリのインストール

ブローカー ホスティング アプリは、デバイス所有者がアプリ ストア (通常は Google Play ストア) からいつでもインストールできます。 ただし、一部の API (リソース) は、デバイスを次のようにする必要がある条件付きアクセス ポリシーによって保護されています。

  • 登録済み(ワークプレイスに参加済み)および/または
  • デバイス管理に登録されている、または
  • Intune App Protection に登録されている

上記の要件を持つデバイスにブローカー アプリがまだインストールされていない場合、MSAL は、アプリが対話形式でトークンを取得しようとするとすぐにインストールするようにユーザーに指示します。 その後、アプリは、デバイスを必要なポリシーに準拠させる手順をユーザーに案内します。 ポリシー要件がない場合、またはユーザーがMicrosoft アカウントでサインインしている場合、Broker アプリのインストールは必要ありません。

ブローカーのインストールとアンインストールの影響

ブローカーがインストールされている場合

ブローカーがデバイスにインストールされている場合、後続のすべての対話型トークン要求 ( acquireToken()への呼び出し) は、MSAL によってローカルではなくブローカーによって処理されます。 MSAL で以前に使用できる SSO 状態は、ブローカーでは使用できません。 その結果、ユーザーはもう一度認証するか、デバイスに認識されているアカウントの既存の一覧からアカウントを選択する必要があります。

ブローカーをインストールする場合、ユーザーはもう一度サインインする必要はありません。 ユーザーが MsalUiRequiredException を解決する必要がある場合にのみ、次の要求がブローカーに送信されます。 MsalUiRequiredException は、いくつかの理由で発生することがあり、対話的に解決する必要があります。 例えば次が挙げられます。

  • ユーザーが自分のアカウントに関連付けられているパスワードを変更しました。
  • ユーザーのアカウントが条件付きアクセス ポリシーを満たしていない。
  • ユーザーは、アプリが自分のアカウントに関連付けられるための同意を取り消しました。

複数のブローカー - デバイスに複数のブローカーがインストールされている場合、MSAL は認証プロセスを完了するためにアクティブなブローカーを単独で識別します

ブローカーがアンインストールされたとき

ブローカー ホスティング アプリが 1 つしかインストールされておらず、削除された場合、ユーザーはもう一度サインインする必要があります。 アクティブなブローカーをアンインストールすると、アカウントと関連付けられているトークンがデバイスから削除されます。

Microsoft Authenticator、Intune ポータル サイト、または Windows へのリンクをアンインストールした場合、ユーザーはもう一度サインインするように求められる場合があります

ブローカーとの統合

ブローカーのリダイレクト URI を生成する

ブローカーと互換性のあるリダイレクト URI を登録する必要があります。 ブローカーのリダイレクト URI には、アプリのパッケージ名と、アプリの署名の Base64 エンコード表現が含まれている必要があります。

リダイレクト URI の形式は次のとおりです。 msauth://<yourpackagename>/<base64urlencodedsignature>

keytool を使用して、アプリの署名キーを使用して Base64 でエンコードされた署名ハッシュを生成し、そのハッシュを使用してリダイレクト URI を生成できます。

Linux と 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

keytool で署名ハッシュを生成したら、Azure ポータルを使用してリダイレクト URI を生成します。

  1. クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
  2. 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使用し、[ディレクトリとサブスクリプション] メニューからアプリケーション登録が含まれるテナントに切り替えます。
  3. Entra ID>アプリ登録に移動します。
  4. アプリケーションを選択し、認証>プラットフォームの追加>Android を選択します
  5. 開いた [ Android アプリの構成 ] ウィンドウで、前に生成した 署名ハッシュパッケージ名を入力します。
  6. [構成] ボタンを選択します。

リダイレクト URI が自動的に生成され、 Android 構成 ウィンドウの [リダイレクト URI ] フィールドに表示されます。

アプリへの署名の詳細については、「Android Studio ユーザー ガイド」の 「アプリに署名 する」を参照してください。

ブローカーを使用するように MSAL を構成する

アプリでブローカーを使用するには、ブローカー リダイレクトを構成したことを証明する必要があります。 たとえば、ブローカーが有効なリダイレクト URI の両方を含め、MSAL 構成ファイルに次の設定を含めることで、登録したことを示します。

"redirect_uri" : "<yourbrokerredirecturi>",
"broker_redirect_uri_registered": true

MSAL は、次の 2 つの方法でブローカーと通信します。

  • ブローカー バインド サービス
  • Android AccountManager

このサービスを呼び出しても Android のアクセス許可は必要ないため、MSAL は最初にブローカー バインド サービスを使用します。 バインドされたサービスへのバインドが失敗した場合、MSAL は Android AccountManager API を使用します。 MSAL は、アプリに "READ_CONTACTS" アクセス許可が既に付与されている場合にのみ実行されます。

エラー コード "BROKER_BIND_FAILURE"MsalClientException が表示された場合は、次の 2 つの対処方法があります:

  • Microsoft Authenticator アプリと Intune ポータル サイトの電源最適化を無効にするようにユーザーに依頼します。
  • "READ_CONTACTS"アクセス許可を付与するようにユーザーに依頼する

ブローカー統合の確認

ブローカー統合が機能していることはすぐには明らかではないかもしれませんが、次の手順を使用して確認できます。

  1. Android デバイスで、ブローカーを使用して要求を完了します。
  2. Android デバイスの設定で、認証したアカウントに対応する新しく作成されたアカウントを探します。 アカウントは 、職場アカウントの種類である必要があります。

テストを繰り返す場合は、設定からアカウントを削除できます。

システム ブラウザーを使用した SSO

Android アプリケーションには、認証ユーザー エクスペリエンスに WEBVIEW、システム ブラウザー、または Chrome カスタム タブを使用するオプションがあります。 アプリケーションがブローカー認証を使用していない場合、SSO を実現するには、ネイティブ Web ビューではなくシステム ブラウザーを使用する必要があります。

認可エージェント

承認エージェントの特定の戦略を選択することは重要であり、アプリがカスタマイズできる追加の機能を表します。 'WEBVIEW' を使用することをお勧めします。 その他の構成値の詳細については、「 Android MSAL 構成ファイルについて」を参照してください。

MSAL では、 WEBVIEWまたはシステム ブラウザーを使用した承認がサポートされています。 次の図は、 WEBVIEW、または CustomTabs を使用したシステム ブラウザー、または CustomTabs を使用しないシステム ブラウザーの外観を示しています。

MSAL ログインの例

SSO への影響

アプリケーションがブローカー認証とアプリに統合せずに WEBVIEW 戦略を使用する場合、ユーザーはデバイス全体、またはネイティブ アプリと Web アプリの間で SSO エクスペリエンスを持つことはありません。

アプリケーションを MSAL と統合して、 BROWSER を使用して承認することができます。 WEBVIEW とは異なり、 BROWSER 既定のシステム ブラウザーと Cookie jar を共有することで、カスタム タブと統合された Web やその他のネイティブ アプリとのサインインを減らすことができます。

アプリケーションが Microsoft Authenticator、Intune ポータル サイト、または Link to Windows などのブローカーで MSAL を使用している場合、ユーザーは、いずれかのアプリでアクティブなサインインを行っている場合、アプリケーション間で SSO エクスペリエンスを持つことができます。

Note

ブローカーを使用する MSAL は WebView を利用し、MSAL ライブラリを使用し、ブローカー認証に参加するすべてのアプリケーションに SSO を提供します。ブローカーからの SSO 状態は、MSAL を使用しない他のアプリには拡張されません。

ウェブビュー

アプリ内 WebView を使用するには、MSAL に渡されるアプリ構成 JSON に次の行を配置します。

"authorization_user_agent" : "WEBVIEW"

アプリ内 WEBVIEWを使用する場合、ユーザーはアプリに直接サインインします。 トークンはアプリのサンドボックス内に保持され、アプリの Cookie jar の外部では使用できません。 その結果、アプリが Microsoft Authenticator アプリ、Intune ポータル サイト、または Link to Windowsと統合されていない限り、ユーザーはアプリケーション間で SSO エクスペリエンスを持つことができません。

ただし、 WEBVIEW では、サインイン UI の外観をカスタマイズする機能が提供されます。 このカスタマイズを行う方法の詳細については、 Android WebViews を参照してください。

ブラウザー

WEBVIEW を使用することをお勧めしますが、ブラウザーと カスタム タブ 戦略を使用するオプションが用意されています。 カスタム構成ファイルで次の JSON 構成を使用して、この戦略を明示的に指定できます。

"authorization_user_agent" : "BROWSER"

デバイスのブラウザーを使用して SSO エクスペリエンスを提供するには、このアプローチを使用します。 MSAL は共有 Cookie jar を使用します。これにより、他のネイティブ アプリまたは Web アプリは、MSAL によって設定された永続化されたセッション Cookie を使用して、デバイス上で SSO を実現できます。

ブラウザーの選択ヒューリスティック

MSAL では、さまざまな Android フォンで使用する正確なブラウザー パッケージを指定することは不可能であるため、MSAL は最適なクロスデバイス SSO を提供しようとするブラウザー選択ヒューリスティックを実装します。

MSAL は、主にパッケージ マネージャーから既定のブラウザーを取得し、テスト済みの安全なブラウザーの一覧に含まれているかどうかを確認します。 そうでない場合、MSAL は、セーフ リストから別の既定以外のブラウザーを起動するのではなく、Webview の使用にフォールバックします。 既定のブラウザーは、カスタム タブをサポートしているかどうかに関係なく選択されます。 ブラウザーでカスタム タブがサポートされている場合、MSAL はカスタム タブを起動します。カスタム タブはアプリ内の WebView に近い外観になり、基本的な UI のカスタマイズが可能になります。 詳細については、 Android のカスタム タブ を参照してください。

デバイスにブラウザー パッケージがない場合、MSAL はアプリ内 WebViewを使用します。 デバイスの既定の設定が変更されていない場合は、SSO エクスペリエンスを確保するために、サインインごとに同じブラウザーを起動する必要があります。

テスト済みブラウザー

次のブラウザーは、構成ファイルで指定された "redirect_uri" に正しくリダイレクトされるかどうかを確認するためにテストされています。

デバイス 組み込みのブラウザー クロム オペラ Microsoft Edge UC ブラウザー Firefox
Nexus 4 (API 17) pass pass 適用されません 適用されません 適用されません 適用されません
Samsung S7 (API 25) pass1 pass pass pass 失敗 pass
Vivo (API 26) pass pass pass pass pass 失敗
ピクセル 2 (API 26) pass pass pass pass 失敗 pass
Oppo pass 該当なし2 適用されません 適用されません 適用されません 適用されません
OnePlus (API 25) pass pass pass pass 失敗 pass
Nexus (API 28) pass pass pass pass 失敗 pass
MI pass pass pass pass 失敗 pass

1Samsung の組み込みブラウザーは Samsung インターネットです。
2Oppo デバイス設定内で既定のブラウザーを変更することはできません。

次のステップ

Android デバイスの共有デバイス モード を使用すると、複数の従業員が簡単に共有できるように Android デバイスを構成できます。

ブローカー アプリケーションの詳細については、以下を参照してください。