이 자습서에서는 SDM(공유 디바이스 모드)을 지원하도록 iOS 또는 iPadOS 애플리케이션을 수정하는 방법을 알아봅니다. SDM은 조직에서 여러 직원 간에 쉽게 공유할 수 있도록 iOS, iPadOS 또는 Android 디바이스를 구성할 수 있는 Microsoft Entra ID 기능으로, 일선 작업자 설정의 일반적인 사례입니다.
이 자습서에서는 다음을 수행합니다.
- 단일 계정 모드에 대한 지원을 추가합니다.
- SDM을 사용하도록 앱을 구성합니다.
- 공유 디바이스 모드를 검색합니다.
- 로그인한 사용자가 변경되었는지 확인합니다.
사전 요구 사항
공유 디바이스 모드 검색
공유 디바이스 모드를 검색하는 것은 애플리케이션에 중요합니다. 대부분의 애플리케이션은 공유 디바이스에서 애플리케이션을 사용할 때 UX(사용자 환경)를 변경해야 합니다. 예를 들어 애플리케이션에는 이미 계정이 있을 가능성이 높기 때문에 일선 작업자에게 적합하지 않은 "등록" 기능이 있을 수 있습니다. 공유 디바이스 모드인 경우 애플리케이션의 데이터 처리에 추가 보안을 추가할 수도 있습니다.
API를 getDeviceInformationWithParameters:completionBlock: 사용하여 앱이 MSALPublicClientApplication 공유 디바이스 모드의 디바이스에서 실행 중인지 확인합니다.
다음 코드 조각은 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
}];
로그인한 사용자를 가져와서 디바이스에서 사용자가 변경되었는지 확인합니다.
공유 디바이스 모드를 지원하는 또 다른 중요한 부분은 디바이스에서 사용자의 상태를 확인하고 사용자가 변경되었거나 디바이스에 사용자가 없는 경우 애플리케이션 데이터를 지우는 것입니다. 다른 사용자에게 데이터가 유출되지 않도록 해야 합니다.
API를 사용하여 getCurrentAccountWithParameters:completionBlock: 디바이스에서 현재 로그인한 계정을 쿼리할 수 있습니다.
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
}];
전역적으로 사용자 로그인
디바이스가 공유 디바이스로 구성된 경우 애플리케이션은 API를 acquireTokenWithParameters:completionBlock: 호출하여 계정에 로그인할 수 있습니다. 계정은 첫 번째 앱이 계정에 로그인한 후 디바이스의 모든 적격 앱에 대해 전역적으로 사용할 수 있습니다.
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 MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";
- (void) registerDarwinNotificationListener
{
CFNotificationCenterRef center =
CFNotificationCenterGetDarwinNotifyCenter();
CFNotificationCenterAddObserver(center, nil,
sharedModeAccountChangedCallback,
(CFStringRef)MSAL_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
}
Swift에서 해당 메서드 서명을 보거나 사용할 수 있는 옵션에 대한 CFNotificationAddObserver 자세한 내용은 다음을 참조하세요.
iOS의 경우 백그라운드에서 활성 상태를 유지하고 Darwin 알림을 수신 대기하려면 앱에 백그라운드 권한이 필요합니다. 다른 백그라운드 작업을 지원하려면 백그라운드 기능을 추가해야 합니다. 다윈 알림을 수신 대기하는 데만 백그라운드 기능이 있는 경우 앱이 Apple App Store에서 거부될 수 있습니다. 백그라운드 작업을 완료하도록 앱이 이미 구성된 경우 해당 작업의 일부로 수신기를 추가할 수 있습니다. iOS 백그라운드 기능에 대한 자세한 내용은 백그라운드 실행 모드 구성을 참조하세요.
공유 디바이스 모드를 지원하는 애플리케이션 Microsoft
이러한 Microsoft 애플리케이션은 Microsoft Entra 공유 디바이스 모드를 지원합니다.
- 마이크로소프트 팀
- Microsoft Viva Engage(이전 Yammer)
- Microsoft Outlook
- Microsoft Power Apps
- Microsoft Power BI Mobile
- Microsoft Edge
- Microsoft Word
- Microsoft Excel
- Microsoft PowerPoint
Important
공개 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 권장되지 않습니다. 일부 기능은 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 온라인 서비스에 대한 유니버설 사용 조건을 참조하세요.
공유 디바이스 모드를 지원하는 타사 MDM
이러한 타사 MDM(모바일 장치 관리) 공급자는 Microsoft Entra 공유 디바이스 모드를 지원합니다.
다음 단계
작동 중인 공유 디바이스 모드를 확인하기 위해 GitHub 다음 코드 샘플에는 공유 디바이스 모드의 iOS 디바이스에서 일선 작업자 앱을 실행하는 예제가 포함되어 있습니다.