iOS デバイスの共有デバイス モード
重要
この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 一部の機能はサポート対象ではないか、機能が制限されることがあります。 詳細については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
小売店員、航空機乗組員、フィールド サービス ワーカーなどの現場担当者は多くの場合、共有モバイル デバイスを使用して作業を行います。 これらの共有デバイスでは、ユーザーが意図的か否かにかかわらず、パスワードや PIN を共有して、共有デバイス上の顧客データやビジネス データにアクセスする場合に、セキュリティ上のリスクをもたらす可能性があります。
共有デバイス モードを使用すると、iOS 13 以上のデバイスを従業員で、より容易にかつ安全に共有できるようになります。 従業員はサインインし、顧客情報にすばやくアクセスできます。 自分のシフトまたはタスクが完了したら、デバイスからサインアウトでき、そのデバイスは直ちに次の従業員が使用できるよう準備が整います。
共有デバイス モードでは、Microsoft ID に基づくデバイスの管理も提供されます。
この機能では、Microsoft Authenticator アプリを使用して、デバイス上のユーザーを管理し、Apple デバイス用の Microsoft Enterprise SSO プラグインを配布します。
共有デバイス モード アプリを作成する
共有デバイス モード アプリを作成するには、開発者とクラウド デバイス管理者が協力して作業します。
アプリケーション開発者は、単一アカウント アプリ (共有デバイス モードでは複数アカウント アプリはサポートされていません) を記述し、共有デバイスのサインアウトなどを処理するためのコードを記述します。
デバイス管理者は、組織内のデバイスを管理するために Microsoft Intune のようなモバイル デバイス管理 (MDM) プロバイダーを使用して、デバイスの共有を準備します。 MDM は、デバイスに Microsoft Authenticator アプリをプッシュし、デバイスのプロファイルの更新を通じて、各デバイスの "共有モード" をオンにします。 この共有モード設定は、デバイスでサポートされているアプリの動作を変更するものです。 MDM プロバイダーからのこの構成によって、デバイスの共有デバイス モードを設定し、共有デバイス モードで必要とされる Apple デバイス用の Microsoft Enterprise SSO プラグインを有効にします。
[パブリック プレビュー中にのみ必要]クラウド デバイス管理者 ロールを持つユーザーは、Microsoft Authenticator アプリを起動し、デバイスを組織に参加させる必要があります。
Azure portal で組織ロールのメンバーシップを構成するには: [Azure Active Directory]>[ロールと管理者]>[クラウド デバイス管理者]
次のセクションは、共有デバイス モードをサポートするようにアプリケーションを更新するのに役立ちます。
Intune を使用して共有デバイス モードと SSO 拡張を有効にする
注意
次の手順は、パブリック プレビュー中にのみ必要です。
デバイスは、共有デバイス モードをサポートするように構成されている必要があります。 iOS 13 以降がインストールされ、MDM に登録されている必要があります。 また、MDM 構成で Apple デバイス用の Microsoft Enterprise SSO プラグインを有効にする必要もあります。 SSO 拡張の詳細については、Apple ビデオを参照してください。
Intune 構成ポータルで、デバイスに次の構成で Apple デバイス用の Microsoft Enterprise SSO プラグインを有効にするように指示します。
- [種類] :リダイレクト
- 拡張 ID: com.microsoft.azureauthenticator.ssoextension
- チーム ID: (iOS ではこのフィールドは必要ありません)
- URL:
https://login.microsoftonline.comhttps://login.microsoft.comhttps://sts.windows.nethttps://login.partner.microsoftonline.cnhttps://login.chinacloudapi.cnhttps://login.microsoftonline.dehttps://login.microsoftonline.ushttps://login.usgovcloudapi.nethttps://login-us.microsoftonline.com
- 構成する追加データ:
- キー: sharedDeviceMode
- 型: Boolean
- 値: true
Intune による構成の詳細については、Intune の構成に関するドキュメントを参照してください。
次に、MDM プロファイルによってデバイスに Microsoft Authenticator アプリをプッシュするように MDM を構成します。
次の構成オプションを設定して、共有デバイス モードを有効にします。
- 構成 1:
- キー: sharedDeviceMode
- 型: Boolean
- 値: true
- 構成 1:
共有デバイス モードをサポートするように 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
}];
サインインしているユーザーを取得し、デバイスでユーザーが変更されたかどうかを特定する
共有デバイス モードをサポートするもう 1 つの重要な部分は、デバイス上のユーザーの状態を判断することと、ユーザーが変更された場合、またはデバイスにユーザーがいない場合に、アプリケーション データをクリアすることです。 管理者は、データが別のユーザーに漏洩されることがないようにする必要があります。
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];
ユーザーをグローバルにサインアウトさせる
次のコードは、サインインしているアカウントを削除し、キャッシュされているトークンをアプリだけでなく共有デバイス モードのデバイスからもクリアします。 ただし、これによって、アプリケーションからデータはクリアされません。 アプリケーションからデータをクリアするだけでなく、アプリケーションでユーザーに表示している可能性があるキャッシュ データもクリアする必要があります。
ブラウザーの状態をクリアする
注意
次の手順は、パブリック プレビュー中にのみ必要です。
このパブリック プレビュー バージョンでは、Apple デバイス用の Microsoft Enterprise SSO プラグインによって、アプリケーションの状態のみがクリアされます。 これによって、Safari ブラウザーでは状態がクリアされません。 ユーザー状態のトレースが確実に残らないようにするために、ブラウザー セッションを手動でクリアすることをお勧めします。 次に示す省略可能な signoutFromBrowser プロパティを使用して、Cookie をクリアできます。 これにより、デバイスでブラウザーが短時間で起動するようになります。
Swift
let account = .... /* account retrieved above */
let signoutParameters = MSALSignoutParameters(webviewParameters: self.webViewParamaters!)
signoutParameters.signoutFromBrowser = true // Only needed for Public Preview.
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; // Only needed for Public Preview.
[application signoutWithAccount:account signoutParameters:signoutParameters completionBlock:^(BOOL success, NSError * _Nullable error)
{
if (!success)
{
// Signout failed
return;
}
// Sign out completed successfully
}];
次のステップ
共有デバイス モードの動作を確認するために、GitHub の次のコード サンプルに、共有デバイス モードの iOS デバイスで 現場担当者アプリを実行する例が含まれています。