Android 用 Microsoft Authentication Library

Android 用の Microsoft Authentication Library (MSAL) は、Android アプリケーションが Microsoft ID プラットフォーム (以前のAzure Active Directory) でユーザーを認証し、OAuth2 プロトコルと OpenID Connect プロトコルを使用して保護された Web API にアクセスできるようにするライブラリです。 MSAL Android を使用すると、開発者はMicrosoft ID プラットフォームからセキュリティ トークンを取得してユーザーを認証し、Android ベースのアプリケーションのセキュリティで保護された Web API にアクセスできます。

MSAL Android では、シングル サインオン (SSO)、条件付きアクセス、ブローカー認証など、複数の認証シナリオがサポートされています。 これにより、Microsoft Entra ID (職場および学校アカウント)、Microsoft アカウント (Outlook.com、hotmail.com、その他複数)、Azure AD B2C (ソーシャル アカウントとローカル アカウント) など、複数の ID を簡単にターゲットにできます。

ここでのガイダンスは、MSAL Android に関連する一般的な機能を文書化することを目的としています。 Microsoft Entra ID、Microsoft アカウント、または AD B2C Azureの使用開始に関するその他のヘルプが必要な場合は、Microsoft ID プラットフォームドキュメントを参照してください。Microsoft Graph API の詳細については、Microsoft Graphドキュメントを参照してください。

MSAL でのネイティブ認証のサポート

MSAL Android では、モバイル アプリケーションでエンド ツー エンドのカスタマイズ可能なフローを使用してネイティブ認証エクスペリエンスを実装することもできます。 ネイティブ認証を使用すると、ユーザーは、アプリを離れることなく、豊富でネイティブなモバイルファーストのサインアップとサインインの過程を案内されます。 ネイティブ認証機能は、 顧客の外部 ID 上のモバイル アプリでのみ使用できます。

Azure Active Directory認証ライブラリ (ADAL) からの移行

Android 用の Azure Active Directory 認証ライブラリ (ADAL) は、2023 年 6 月に廃止されました。 お客様または組織が Android 用の Azure Active Directory 認証ライブラリ (ADAL) を使用している場合は、アプリのセキュリティを危険にさらさないように MSAL Android に移行する必要があります。 Android 用Microsoft Authentication Library (MSAL) は、認証とトークンの取得に使用できるサポートされているライブラリです。

MSAL Android の使用を開始する

アプリケーションで MSAL Android を使用するには、次の手順を実行する必要があります。

MSAL Android では、ブラウザーによる委任された認証エクスペリエンスとネイティブ認証エクスペリエンスの両方がサポートされているため、シナリオに基づいて次のチュートリアルの手順に従います。

Requirements

  • 最小 SDK バージョン 16 以降
  • ターゲット SDK バージョン 33 以降

手順 1: MSAL への依存関係を宣言する

アプリの build.gradle に追加します。

dependencies {
    implementation 'com.microsoft.identity.client:msal:4.9.+'
}

gradle スクリプトのリポジトリ セクションに次の行も追加してください。

maven { 
    url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1' 
}

手順 2: MSAL 構成ファイルを作成する

ブラウザー委任認証:

構成ファイルをプロジェクトの "生" リソースとして作成します。 PublicClientApplication インスタンスを構築するときに、生成されたリソース識別子を使用して参照します。 アプリを初めてMicrosoft Entra 管理センターに登録する場合は、詳細な MSAL Android 構成ファイルも提供されます

{
  "client_id" : "<YOUR_CLIENT_ID>",
  "redirect_uri" : "msauth://<YOUR_PACKAGE_NAME>/<YOUR_BASE64_URL_ENCODED_PACKAGE_SIGNATURE>",
  "broker_redirect_uri_registered": true,
}

redirect_uriでは、<YOUR_PACKAGE_NAME>は、context.getPackageName() メソッドによって返されるパッケージ名を参照します。 このパッケージ名は、application_id ファイルで定義されているbuild.gradleと同じです。

上記の値は、最低限必要な構成です。 MSAL は、他のすべての設定に対してライブラリに付属する既定値に依存します。 ライブラリの既定値については、 MSAL Android 構成ファイルのドキュメント を参照してください。

ネイティブ認証:

  1. res を右クリックし、[新しい > ディレクトリ] を選択します。 新しいディレクトリ名として raw を入力し、[OK] を選択します。
  2. この新しいフォルダー (アプリ > src > main > res > raw) に、auth_config_native_auth.json という名前の新しい JSON ファイルを作成し、次のテンプレート MSAL 構成を貼り付けます。
{ 
  "client_id": "Enter_the_Application_Id_Here", 
  "authorities": [ 
    { 
      "type": "CIAM", 
      "authority_url": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/" 
    } 
  ], 
  "challenge_types": ["oob"], 
  "logging": { 
    "pii_enabled": false, 
    "log_level": "INFO", 
    "logcat_enabled": true 
  } 
 }

手順 3: ブラウザーで委任された認証の AndroidManifest.xml を構成する

  1. Android マニフェストを使用して次のアクセス許可を要求する
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. リダイレクト URI を使用して Android マニフェストで意図フィルターを構成する

構成で指定したリダイレクト URI に一致する意図フィルターを含めなかった場合、対話型トークン要求が失敗します。

    <!--Intent filter to capture authorization code response from the default browser on the device calling back to our app after interactive sign in -->
    <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:scheme="msauth"
                android:host="<YOUR_PACKAGE_NAME>"
                android:path="/<YOUR_BASE64_ENCODED_PACKAGE_SIGNATURE>" />
        </intent-filter>
    </activity>

一般的なリダイレクト URI の問題の詳細については、 MSAL Android に関する FAQ を参照してください。

ProGuard

MSAL は、実行時に .class ファイルに格納されているリフレクションとジェネリック型の情報を使用して、さまざまな永続化とシリアル化に関連する機能をサポートします。 縮小と難読化のライブラリのサポートは限られています。 このライブラリにはデフォルト設定が含まれています。問題を見つけた場合は、issue を報告してください。

レコメンデーション

MSAL はセキュリティ ライブラリです。 ユーザーがサービスにサインインしてアクセスする方法を制御します。 可能な限り、アプリで最新バージョンのライブラリを使用することをお勧めします。 アプリを更新するリスクを制御できるように、 セマンティック バージョン 管理を使用します。 たとえば、常に最新のマイナー バージョン番号 (x.y.x など) をダウンロードすると、API のサーフェス領域が変更されていないことを保証して、最新のセキュリティと機能を確実に利用できます。 最新バージョンとリリース ノートは、GitHubの [リリース] タブでいつでも確認できます。