適用於 iOS 裝置的共用裝置模式

重要

這項功能處於公開預覽狀態。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 某些功能可能不受支援,或功能受到限制。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

一線工作者 (例如零售員工、飛行機組成員和現場服務人員) 通常會使用共用行動裝置來執行其工作。 如果您的使用者刻意共用其密碼或 PIN 碼,以存取共用裝置上的客戶和商務資料,則這些共用的裝置可能會有安全性風險。

共用裝置模式可讓您設定 iOS 13 或更新版的裝置,讓員工更輕鬆且安全地共用裝置。 員工可以登入並快速存取客戶資訊。 當他們完成班次或工作時,他們可以登出裝置,並立即可供下一位員工使用。

共用裝置模式也提供 Microsoft 身分識別支援的裝置管理。

這項功能會使用 Microsoft Authenticator 應用程式來管理裝置上的使用者,以及散發適用於 Apple 裝置的 Microsoft 企業單一登入外掛程式

建立共用裝置模式應用程式

若要建立共用裝置模式應用程式,開發人員和雲端裝置管理員需要合作:

  1. 應用程式開發人員 無法在共用裝置模式中 (多帳戶應用程式撰寫單一帳戶應用程式,) 和撰寫程式碼來處理共用裝置登出之類的事項。

  2. 裝置系統管理員會使用行動裝置管理 (MDM) 提供者 (例如 Microsoft Intune) 來準備要共用的裝置,以管理其組織中的裝置。 MDM 會將 Microsoft Authenticator 應用程式推送至裝置,並透過裝置的設定檔更新,為每個裝置開啟「共用模式」。 此共用模式設定會變更裝置上支援的應用程式行為。 MDM 提供者的這項設定會為裝置設定共用裝置模式,並為共用裝置模式啟用所需的適用於 Apple 裝置的 Microsoft 企業單一登入外掛程式

  3. [只在公開預覽期間才需要] 具有雲端裝置系統管理員角色的使用者,接著必須啟動 Microsoft Authenticator 應用程式,並將其裝置加入組織。

    若要在 Azure 入口網站中設定組織角色的成員資格:[Azure Active Directory]>[角色和管理員]>[雲端裝置管理員]

下列各節可協助您將應用程式更新為支援共用裝置模式。

使用 Intune 啟用共用裝置模式 & SSO 延伸模組

注意

只有在公開預覽期間,才需要執行下列步驟。

您的裝置必須設定為支援共用裝置模式。 裝置必須已安裝 iOS 13+ 且已註冊 MDM。 MDM 設定也需要啟用適用於 Apple 裝置的 Microsoft 企業單一登入外掛程式。 若要深入了解 SSO 延伸模組,請參閱 Apple 影片

  1. 在 Intune 設定入口網站中,告知裝置使用下列設定來啟用適用於 Apple 裝置的 Microsoft 企業單一登入外掛程式

    • 類型:重新導向
    • 延伸模組識別碼:com.microsoft.azureauthenticator.ssoextension
    • 小組識別碼:iOS) 不需要此欄位 (
    • URL
      • https://login.microsoftonline.com
      • https://login.microsoft.com
      • https://sts.windows.net
      • https://login.partner.microsoftonline.cn
      • https://login.chinacloudapi.cn
      • https://login.microsoftonline.de
      • https://login.microsoftonline.us
      • https://login.usgovcloudapi.net
      • https://login-us.microsoftonline.com
    • 要設定的其他資料
      • 金鑰:sharedDeviceMode
      • 類型:布林值
      • 值:True

    如需使用 Intune 設定的詳細資訊,請參閱 Intune 設定文件

  2. 接下來,設定您的 MDM 為透過 MDM 設定檔將 Microsoft Authenticator 應用程式推送至您的裝置。

    設定下列設定選項,以開啟共用裝置模式:

    • 設定 1:
      • 金鑰:sharedDeviceMode
      • 類型:布林值
      • 值:True

修改您的 iOS 應用程式以支援共用裝置模式

您的使用者仰賴您確保其資料不會洩漏給其他使用者。 下列各節提供實用的信號,可向您指出應用程式已發生變更且應該處理。

您負責在每次使用您的應用程式時檢查裝置上的使用者狀態,然後清除先前使用者的資料。 這包括是否從多工背景重載。

在使用者變更時,您應該確定已清除前一個使用者的資料,並移除應用程式中顯示的所有快取資料。 我們強烈建議您和您的公司在更新應用程式以支援共用裝置模式後,進行安全性審核程序。

偵測共用裝置模式

偵測共用裝置模式對於您的應用程式十分重要。 在共用裝置上使用應用程式時,許多應用程式的使用者體驗 (UX) 都需要變更。 例如,您的應用程式可能會有「註冊」功能,因此不適合可能已經有帳戶的一線工作者。 如果資料處於共用裝置模式,您可能也會想要為應用程式的資料處理新增額外安全性。

使用 MSALPublicClientApplication 中的 getDeviceInformationWithParameters:completionBlock: API 判斷應用程式是否在使用共用裝置模式的裝置上執行。

下列程式碼片段顯示使用 getDeviceInformationWithParameters:completionBlock: API 的範例。

Swift

application.getDeviceInformation(with: nil, completionBlock: { (deviceInformation, error) in

    guard let deviceInfo = deviceInformation else {
        return
    }

    let isSharedDevice = deviceInfo.deviceMode == .shared
    // Change your app UX if needed
})

Objective-C

[application getDeviceInformationWithParameters:nil
                                completionBlock:^(MSALDeviceInformation * _Nullable deviceInformation, NSError * _Nullable error)
{
    if (!deviceInformation)
    {
        return;
    }

    BOOL isSharedDevice = deviceInformation.deviceMode == MSALDeviceModeShared;
    // Change your app UX if needed
}];

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

支援共用裝置模式的另一個重要部分是判斷裝置上的使用者狀態,並在使用者已變更或裝置上沒有任何使用者時清除應用程式資料。 您必須負責確保資料不會外泄給其他使用者。

您可以使用 getCurrentAccountWithParameters:completionBlock: API 來查詢裝置上目前已登入的帳戶。

Swift

let msalParameters = MSALParameters()
msalParameters.completionBlockQueue = DispatchQueue.main

application.getCurrentAccount(with: msalParameters, completionBlock: { (currentAccount, previousAccount, error) in

    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
})

Objective-C

MSALParameters *parameters = [MSALParameters new];
parameters.completionBlockQueue = dispatch_get_main_queue();

[application getCurrentAccountWithParameters:parameters
                             completionBlock:^(MSALAccount * _Nullable account, MSALAccount * _Nullable previousAccount, NSError * _Nullable error)
{
    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
}];

全域登入使用者

當裝置設定為共用裝置時,您的 acquireTokenWithParameters:completionBlock: 應用程式可以呼叫 API 來登入帳戶。 在第一個應用程式登入帳戶之後,裝置上的所有合格應用程式上都可使用此帳戶。

Objective-C

MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"api://myapi/scope"] webviewParameters:[self msalTestWebViewParameters]];

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

全域登出使用者

下列動作會移除已登入的帳戶,並從應用程式和使用共用裝置模式的裝置中清除快取權杖。 不過,它不會從您的應用程式清除 資料 。 您必須清除應用程式中的資料,並清除應用程式可能會向使用者顯示的任何快取資料。

Swift

let account = .... /* account retrieved above */

let signoutParameters = MSALSignoutParameters(webviewParameters: self.webViewParamaters!)
signoutParameters.signoutFromBrowser = true // To trigger a browser signout in Safari.

application.signout(with: account, signoutParameters: signoutParameters, completionBlock: {(success, error) in
    if let error = error {

        // Signout failed

        return

    }

    // Sign out completed successfully

})

Objective-C

MSALAccount *account = ... /* account retrieved above */;

MSALSignoutParameters *signoutParameters = [[MSALSignoutParameters alloc] initWithWebviewParameters:webViewParameters];

signoutParameters.signoutFromBrowser = YES; // To trigger a browser signout in Safari.

[application signoutWithAccount:account signoutParameters:signoutParameters completionBlock:^(BOOL success, NSError * _Nullable error)

{

    if (!success)

    {

        // Signout failed

        return;

    }

    // Sign out completed successfully

}];

Apple 裝置的 Microsoft Enterprise SSO 外掛程式只會清除應用程式的狀態。 它不會清除 Safari 瀏覽器上的狀態。 您可以使用上述程式碼片段中所示的選擇性 signoutFromBrowser 屬性,在 Safari 中觸發瀏覽器登出。 這會導致瀏覽器在裝置上短暫啟動。

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

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

下列程式碼片段示範如何註冊廣播接收者。

NSString *const MSID_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";

- (void) registerDarwinNotificationListener 

{ 

   CFNotificationCenterRef center =

   CFNotificationCenterGetDarwinNotifyCenter(); 

   CFNotificationCenterAddObserver(center, nil,

   sharedModeAccountChangedCallback,

   (CFStringRef)MSID_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY, 

   nil, CFNotificationSuspensionBehaviorDeliverImmediately); 

} 

// CFNotificationCallbacks used specifically for Darwin notifications leave userInfo unused 

void sharedModeAccountChangedCallback(CFNotificationCenterRef center, void * observer, CFStringRef name, void const * object, __unused CFDictionaryRef userInfo) 

{ 

    // Invoke account cleanup logic here 

} 

如需 CFNotificationAddObserver 可用選項的詳細資訊,或若要查看 Swift 中的對應方法簽章,請參閱:

針對 iOS,您的應用程式需要背景許可權,才能在背景中保持作用中,並接聽 Darwin 通知。 必須新增背景功能以支援不同的背景作業–如果您的 app 只有背景功能才能接聽 Darwin 通知,則您的應用程式可能會遭到 Apple App Store拒絕。 如果您的應用程式已設定為完成背景作業,您可以將接聽程式新增為該作業的一部分。 如需 iOS 背景功能的詳細資訊,請參閱 設定背景執行模式

後續步驟

若要查看作用中的共用裝置模式,下列 GitHub 程式碼範例包含在 iOS 裝置上以共用裝置模式執行一線工作者應用程式的範例:

MSAL iOS Swift Microsoft Graph API 範例