教學課程:在Android應用程式中使用共用裝置模式

在本教學課程中,Android 開發人員和 Microsoft Entra 租使用者系統管理員會瞭解為 Android 應用程式啟用共用裝置模式所需的程式碼、Authenticator 應用程式和租用戶設定。

在本教學課程中:

  • 下載程式代碼範例
  • 啟用和偵測共用裝置模式
  • 偵測單一或多個帳戶模式
  • 偵測用戶切換,並啟用全域登入和註銷
  • 設定租用戶並註冊應用程式
  • 以共用裝置模式設定 Android 裝置
  • 執行範例應用程式

必要條件

開發人員指南

本教學課程的這一節提供使用 Microsoft 驗證連結庫 (MSAL) 在 Android 應用程式中實作共用裝置模式的開發人員指引。 請參閱 MSAL Android 教學課程,瞭解如何整合 MSAL 與 Android 應用程式、登入使用者、呼叫 Microsoft graph,以及註銷使用者。

下載範例

從 GitHub 複製範例應用程式。 此範例具有在單一或多帳戶模式運作的功能。

將 MSAL SDK 新增至本機 Maven 存放庫

如果您未使用範例應用程式,請在 build.gradle 檔案中將 MSAL 連結庫新增為相依性,如下所示:

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

設定您的應用程式以使用共用裝置模式

如需 設定組態檔的詳細資訊,請參閱組態檔

在 MSAL 組態檔中設定 "shared_device_mode_supported"true

您可能不打算支援多帳戶模式。 這可能是如果您未使用共用裝置,而且使用者可以同時使用多個帳戶登入應用程式。 如果是,請將 設定 "account_mode""SINGLE"。 這可確保您的應用程式一律會取得 ISingleAccountPublicClientApplication,並大幅簡化 MSAL 整合。 的預設值 "account_mode""MULTIPLE",因此如果您使用 模式,請務必在組態檔 "single account" 中變更此值。

以下是範例應用程式>mains>>原始目錄中包含的 auth_config.json 檔案範例:

{
  "client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
  "authorization_user_agent": "DEFAULT",
  "redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
  "account_mode": "SINGLE",
  "broker_redirect_uri_registered": true,
  "shared_device_mode_supported": true,
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

偵測共用裝置模式

共用裝置模式可讓您設定多個員工共用 Android 裝置,同時提供 Microsoft 身分識別支援的裝置管理。 員工可以登入其裝置並快速存取客戶資訊。 當他們完成班次或工作時,他們將能夠用單鍵註銷共用裝置上的所有應用程式,且裝置將立即準備好供下一位員工使用。

用來 isSharedDevice() 判斷應用程式是否在處於共用裝置模式的裝置上執行。 您的應用程式可以使用這個旗標來判斷它是否應該據以修改 UX。

以下代碼段示範如何使用 isSharedDevice()。 它來自 SingleAccountModeFragment 範例應用程式中的類別:

deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");

初始化 PublicClientApplication 物件

如果您在 MSAL 組態檔中設定 "account_mode":"SINGLE" ,可以安全地將傳回的應用程式物件 ISingleAccountPublicCLientApplication轉換成 。

private ISingleAccountPublicClientApplication mSingleAccountApp;

/*Configure your sample app and save state for this activity*/
PublicClientApplication.create(this.getApplicationCOntext(),
  R.raw.auth_config,
  new PublicClientApplication.ApplicationCreatedListener(){
  @Override
  public void onCreated(IPublicClientApplication application){
  mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
  loadAccount();
  }
  @Override
  public void onError(MsalException exception){
  /*Fail to initialize PublicClientApplication */
  }
});

偵測單一與多個帳戶模式

如果您要撰寫只用於共用裝置上前線背景工作角色的應用程式,建議您撰寫應用程式僅支援單一帳戶模式。 這包括大部分以工作為主的應用程式,例如醫療記錄應用程式、發票應用程式,以及大部分的企業營運應用程式。 這會簡化您的開發,因為不需要容納 SDK 的許多功能。

如果您的應用程式支援多個帳戶和共用裝置模式,您必須執行類型檢查並轉換成適當的介面,如下所示。

private IPublicClientApplication mApplication;

        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        } else if (mApplication instanceOf    ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

取得登入的使用者,並判斷使用者是否已在裝置上變更

方法 loadAccount 會擷取已登入用戶的帳戶。 方法 onAccountChanged 會判斷已登入的使用者是否已變更,如果是,請清除:

private void loadAccount()
{
  mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
  {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount)
    {
      if (activeAccount != null)
      {
        signedInUser = activeAccount;
        mSingleAccountApp.acquireTokenSilentAsync(SCOPES,"http://login.microsoftonline.com/common",getAuthSilentCallback());
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        updateSingedOutUI();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
    }
  }
}

全域登入使用者

下列會登入裝置上的使用者,以使用 MSAL 搭配 Authenticator 應用程式的其他應用程式:

private void onSignInClicked()
{
  mSingleAccountApp.signIn(getActivity(), SCOPES, null, getAuthInteractiveCallback());
}

全域註銷使用者

下列作業會移除已登入的帳戶,並清除來自應用程式以及共用裝置模式裝置的快取令牌:

private void onSignOutClicked()
{
  mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback()
  {
    @Override
    public void onSignOut()
    {
      updateSignedOutUI();
    }
    @Override
    public void onError(@NonNull MsalException exception)
    {
      /*failed to remove account with an exception*/
    }
  });
}

接收廣播以偵測從其他應用程式起始的全域註銷

若要接收帳戶變更廣播,您必須註冊廣播接收者。 建議您透過 內容註冊的接收者註冊廣播接收器

收到帳戶變更廣播時,立即 取得登入的使用者,並判斷使用者是否已在裝置上變更。 如果偵測到變更,請起始先前登入帳戶的數據清除。 建議您適當地停止任何作業並執行數據清除。

下列代碼段示範如何註冊廣播接收器。

private static final String CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER = "com.microsoft.identity.client.sharedmode.CURRENT_ACCOUNT_CHANGED";
private BroadcastReceiver mAccountChangedBroadcastReceiver;
private void registerAccountChangeBroadcastReceiver(){
    mAccountChangedBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //INVOKE YOUR PRIOR ACCOUNT CLEAN UP LOGIC HERE
        }
    };
    IntentFilter filter = new

    IntentFilter(CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER);
    this.registerReceiver(mAccountChangedBroadcastReceiver, filter);
}

系統管理員指南

下列步驟說明如何設定您的應用程式,並將您的裝置置於共用裝置模式。

註冊應用程式

首先,在組織租用戶內註冊應用程式。 然後在 auth_config.json 中提供下列值,讓您的應用程式能夠正確執行。

如需如何執行這項操作的資訊,請參閱 註冊您的應用程式

注意

當您註冊應用程式時,請使用左側的快速入門指南,然後選取 [Android]。 這將會引導您前往頁面,要求您提供應用程式的套件名稱和簽章哈希。 請務必確保應用程式組態能夠運作。 接著,您會收到組態物件,您可以用於您的應用程式,以剪下並貼到您的 auth_config.json 檔案中。

Configure your Android app page

您應該選取 [為我 進行這項變更],然後提供快速入門所要求的值。 完成後,我們將產生您需要的所有組態檔。

Configure your project page

設定租用戶

為了進行測試,請在租用戶中設定下列專案:至少兩名員工、一個雲端裝置 管理員 istrator,以及一個全域 管理員 istrator。 修改組織角色來設定雲端裝置 管理員 istrator。 選取 [身分>識別角色與系統管理員角色和系統管理員>>] [所有角色],然後選取 [雲端裝置 管理員 istrator],以存取您的組織角色。 新增可將裝置置於共用模式的使用者。

以共用模式設定 Android 裝置

下載 Authenticator 應用程式

從Google Play商店下載 Microsoft Authenticator 應用程式。 如果您已經下載應用程式,請確定它是最新版本。

驗證器應用程式設定和在雲端中註冊裝置

啟動 Authenticator 應用程式並流覽至主要帳戶頁面。 一旦您看到 [ 新增帳戶 ] 頁面,即可讓裝置共用。

Authenticator add account screen

使用右側功能表列移至 [設定] 窗格。 選取 [公司與學校帳戶] 下的 [裝置註冊]。

Authenticator settings screen

當您按下此按鈕時,系統會要求您授權存取裝置聯繫人。 這是因為裝置上的 Android 帳戶整合。 選擇 [允許]。

Authenticator allow access confirmation screen

雲端裝置 管理員 istrator 應該在 [或註冊為共用裝置] 底下輸入其組織電子郵件。 然後按下註冊 為共用裝置 按鈕,然後輸入其認證。

Device registration screen in app

App screenshot showing Microsoft sign-in page

裝置現在處於共用模式。

App screen showing shared device mode enabled

裝置上的任何登入和註銷都會是全域的,這表示這些登入會套用至裝置上與 MSAL 和 Microsoft Authenticator 整合的所有應用程式。 您現在可以將應用程式部署到使用共用裝置模式功能的裝置。

檢視共用裝置

一旦您將裝置置於共用模式后,組織就會知道該裝置,並在您的組織租用戶中追蹤。 您可以查看 聯結類型來檢視您的共享裝置。

Screenshot that shows the all devices pane

執行範例應用程式

範例應用程式是一個簡單的應用程式,會呼叫您組織的圖形 API。 在第一次執行時,系統會提示您同意,因為應用程式是員工帳戶的新手。

Application configuration info screen

下一步

深入瞭解在 Android 裝置上使用 Microsoft 驗證連結庫和共用裝置模式: