適用於 Android 裝置的共用裝置模式
一線工作者 (例如零售員工、飛行機組成員和現場服務人員) 通常會使用共用行動裝置來執行其工作。 如果您的使用者刻意共用其密碼或 PIN 碼,以存取共用裝置上的客戶和商務資料,則這些共用的裝置可能會有安全性風險。
共用裝置模式可讓您設定 Android 8.0 或更新版的裝置,讓員工更輕鬆且安全地共用裝置。 員工只需登入一次即可使用單一登入 (SSO) 來取用所有支援此功能的應用程式,進而更快地存取資訊。 當員工完成輪班或工作之後登出時,他們會自動登出裝置和所有支援的應用程式,讓裝置準備好供下一位使用者使用。
若要利用共用裝置模式功能,應用程式開發人員和雲端裝置管理員需要共同合作:
裝置管理員會手動或使用行動裝置管理 (MDM) 提供者 (例如 Microsoft Intune) 來準備要共用的裝置。 慣用選項是使用 MDM,因為它允許透過零觸控佈建大規模在共用裝置模式中安裝裝置。 MDM 會將 Microsoft Authenticator 應用程式 推送至裝置,並透過裝置的受控設定更新,為每個裝置開啟「共用模式」。 此共用模式設定會變更裝置上支援的應用程式行為。 來自 MDM 提供者的這項設定會設定裝置的共用裝置模式,並使用 Authenticator 應用程式觸發共用裝置註冊。
應用程式開發人員會撰寫單一帳戶應用程式 (共用裝置模式中不支援多帳戶應用程式),以處理下列案例:
- 透過任何支援的應用程式在使用者裝置範圍內登入。
- 透過任何支援的應用程式在使用者裝置範圍內登出。
- 查詢裝置的狀態,以判斷您的應用程式是否位於處於共用裝置模式的裝置上。
- 查詢使用者的裝置狀態,以判斷自上次使用以來您的應用程式是否有任何變更。
支援共用裝置模式應將其視為應用程式的功能更新,並有助於提高其在多個使用者使用同一裝置環境中的採用率。
重要
支援 Android 共用裝置模式的Microsoft 應用程式 不需要進行任何變更,只需要安裝在裝置上,即可取得共用裝置模式隨附的優點。
在共用裝置模式中設定裝置
若要設定 Android 裝置以支援共用裝置模式,應該執行 Android OS 8.0 或更新版本。 裝置也應該由原廠重設抹除,或讓所有 Microsoft 和其他已啟用共用裝置模式的應用程式解除安裝後並重新安裝。
Microsoft Intune 支援在 Microsoft Entra 共用裝置模式中為裝置進行零觸控佈建,這表示裝置可以在一線工作者最少干預的情況下,在 Intune 中進行設定和註冊。 若要在使用 Microsoft Intune 作為 MDM 時,以共用裝置模式設定裝置,請參閱在 Microsoft Entra 共用裝置模式中設定裝置的註冊。
修改您的 Android 應用程式以支援共用裝置模式
您的使用者仰賴您確保其資料不會洩漏給其他使用者。 下列各節提供實用的信號,可向您指出應用程式已發生變更且應該處理。 您負責在每次使用您的應用程式時,檢查裝置上的使用者狀態,然後清除前一位使用者的資料。 這包括其是否會在多工處理中從背景重新載入。 在使用者變更時,您應該確定已清除前一個使用者的資料,並移除應用程式中顯示的所有快取資料。 我們強烈建議您和您的公司在更新應用程式以支援共用裝置模式後,進行安全性審核程序。
將 Microsoft 驗證庫 (MSAL) SDK 新增至應用程式的相依性
請將 MSAL 程式庫新增為 build.gradle 檔案中的相依性,如下所示:
dependencies{
implementation 'com.microsoft.identity.client.msal:5.+'
}
將您的應用程式設定為使用共用裝置模式
使用 Microsoft 驗證程式庫 (MSAL) SDK 所撰寫的應用程式,可以管理單一帳戶或多個帳戶。 如需詳細資料,請參閱單一帳戶模式或多帳戶模式。 共用裝置模式應用程式只能在單一帳戶模式下運作。
如果您不打算支援多重帳戶模式,請在 MSAL 設定檔中將 "account_mode"
設定為 "SINGLE"
。 這可保證您的應用程式一律會取得 ISingleAccountPublicClientApplication
,並大幅簡化您的 MSAL 整合。 "account_mode"
的預設值是 "MULTIPLE"
,因此若使用 "single account"
模式,請務必在組態檔中變更此值。
這是設定檔的範例:
{
"client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
"authorization_user_agent": "WEBVIEW",
"redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
"account_mode": "SINGLE",
"broker_redirect_uri_registered": true,
"authorities": [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount",
"tenant_id": "common"
}
}
]
}
如需有關設定組態檔的詳細資訊,請參閱設定文件。
同時支援單一帳戶和多帳戶
您可以建置應用程式,以支援同時在個人裝置和共用裝置上執行。 如果您的應用程式目前支援多個帳戶,而且您想要支援共用裝置模式,請新增單一帳戶模式的支援。
您也可能想要應用程式變更其行為,取決於其執行所在的裝置類型。 使用 ISingleAccountPublicClientApplication.isSharedDevice()
來決定何時要在單一帳戶模式下執行。
有兩個不同的介面,代表您應用程式所在的裝置類型。 當您從 MSAL 的應用程式工廠要求應用程式執行個體時,系統會自動提供正確的應用程式物件。
下列物件模型說明您可能會收到的物件類型,以及其在共用裝置內容中的意義:
當您取得 PublicClientApplication
物件時,您必須進行類型檢查並轉換成適當的介面。 下列程式碼會檢查多帳戶模式或單一帳戶模式,並相應地轉換應用程式物件:
private IPublicClientApplication mApplication;
// Running in personal-device mode?
if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
...
// Running in shared-device mode?
} else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
...
}
下列差異適用,取決於您的應用程式是在共用裝置還是在個人裝置上執行:
共用模式裝置 | 個人裝置 | |
---|---|---|
客戶 | 單一帳戶 | 多個帳戶 |
登入 | 全球 | 全球 |
登出 | 全球 | 每個應用程式都可以控制登出是在應用程式的本機進行。 |
支援的帳戶類型 | 僅限工作帳戶 | 支援的個人和工作帳戶 |
初始化 PublicClientApplication 物件
如果您在 MSAL 設定檔中設定 "account_mode":"SINGLE"
,則可以將傳回的應用程式物件安全地轉換為 ISingleAccountPublicCLientApplication
。
private ISingleAccountPublicClientApplication mSingleAccountApp;
PublicClientApplication.create(
this.getApplicationCOntext(),
R.raw.auth_config_single_account,
new PublicClientApplication.ApplicationCreatedListener() {
@Override
public void onCreated(IPublicClientApplication application){
mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
}
@Override
public void onError(MsalException exception){
/*Fail to initialize PublicClientApplication */
}
});
偵測共用裝置模式
偵測共用裝置模式對於您的應用程式十分重要。 在共用裝置上使用應用程式時,許多應用程式的使用者體驗 (UX) 都需要變更。 例如,您的應用程式可能會有「註冊」功能,因此不適合可能已經有帳戶的一線工作者。 如果資料處於共用裝置模式,您可能也會想要為應用程式的資料處理新增額外安全性。
使用 IPublicClientApplication
中的 isSharedDevice
API 判斷應用程式是否在使用共用裝置模式的裝置上執行。
下列程式碼片段顯示使用 isSharedDevice
API 的範例。
deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");
取得已登入的使用者,並判斷裝置上的使用者是否已變更
支援共用裝置模式的另一個重要部分是決定裝置上的使用者狀態,並在使用者已變更或裝置上完全沒有使用者時清除應用程式資料。 您負責確保資料不會洩漏給其他使用者。
您可以使用 getCurrentAccountAsync
API 來查詢裝置上目前已登入的帳戶。
loadAccount
方法會擷取登入使用者的帳戶。 onAccountChanged
方法會判斷登入的使用者是否已變更,如果是,則執行清除作業:
private void loadAccount()
{
mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
{
@Override
public void onAccountLoaded(@Nullable IAccount activeAccount)
{
if (activeAccount != null)
{
signedInUser = activeAccount;
final AcquireTokenSilentParameters silentParameters = new AcquireTokenSilentParameters.Builder()
.fromAuthority(signedInUser.getAuthority())
.forAccount(signedInUser)
.withScopes(Arrays.asList(getScopes()))
.withCallback(getAuthSilentCallback())
.build();
mSingleAccountApp.acquireTokenSilentAsync(silentParameters);
}
}
@Override
public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
{
if (currentAccount == null)
{
//Perform a cleanup task as the signed-in account changed.
cleaUp();
}
}
@Override
public void onError(@NonNull Exception exception)
{
//getCurrentAccountAsync failed
}
}
}
全域登入使用者
當裝置設定為共用裝置時,您的 signIn
應用程式可以呼叫 API 來登入帳戶。 在第一個應用程式登入帳戶之後,裝置上的所有合格應用程式上都可使用此帳戶。
final SignInParameters signInParameters = ... /* create SignInParameters object */
mSingleAccountApp.signIn(signInParameters);
全域登出使用者
下列動作會移除已登入的帳戶,並從應用程式和使用共用裝置模式的裝置中清除快取權杖。 但是,這不會清除應用程式中的「資料」。 您必須清除應用程式中的資料,並清除應用程式可能會向使用者顯示的任何快取資料。
mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
@Override
public void onSignOut() {
// clear data from your application
}
@Override
public void onError(@NonNull MsalException exception) {
// signout failed, show error
}
});
接收廣播以偵測從其他應用程式起始的全域登出
若要接收帳戶變更廣播,您必須註冊廣播接收器。 建議您透過 內容註冊的接收器註冊廣播接收器。
收到帳戶變更廣播時,立即取得登入的使用者,並判斷使用者是否已在裝置上變更。 如果偵測到變更,即會為先前登入的帳戶起始資料清除。 建議您適當地停止所有作業並清除資料。
下列程式碼片段示範如何註冊廣播接收器。
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);
}
支援共用裝置模式的 Microsoft 應用程式
這些 Microsoft 應用程式支援 Microsoft Entra 的共用裝置模式:
- Microsoft Teams
- Microsoft Viva Engage (先前 Yammer)
- Outlook
- Microsoft Power Apps
- Microsoft 365
- Microsoft Power BI 行動版
- Microsoft Edge
- 受控主畫面
支援共用裝置模式的第三方 MDM
這些第三方行動裝置管理 (MDM) 提供支援 Microsoft Entra 共用裝置模式:
共用裝置登出和整體應用程式生命週期
當使用者登出時,您必須採取行動,以保護使用者的隱私權和資料。 例如,如果您是建置醫療記錄應用程式,則會想要確定當使用者登出時,清除先前顯示的患者記錄。 您的應用程式必須為資料隱私權做好準備,並在每次進入前景時檢查。
當您的應用程式使用 MSAL,在處於共用模式的裝置上執行的應用程式中,將使用者登出時,已登入的帳戶和快取的權杖會從應用程式和裝置中移除。
下圖顯示整體應用程式生命週期,以及在應用程式執行時可能發生的常見事件。 此圖表涵蓋了活動啟動、登入和登出帳戶的時間,以及暫停、繼續及停止活動之類的事件如何納入。
下一步
設定 Android 裝置以共用裝置模式執行應用程式,並測試您的應用程式。