iOS용 앱 SDK Intune - App Protection CA 지원(선택 사항)
앱 보호 조건부 액세스는 Intune 앱 보호 정책이 적용된 것을 확인할 때까지 서버 토큰에 대한 액세스를 차단합니다. 이 기능을 사용하려면 사용자 추가 흐름을 변경해야 합니다. 고객이 App Protection CA를 사용하도록 설정하면 보호된 리소스에 액세스하는 해당 고객 테넌트의 애플리케이션은 이 기능을 지원하지 않는 한 액세스 토큰을 획득할 수 없습니다.
참고
이 가이드는 여러 가지 개별 단계로 나뉩니다. 먼저 1단계: 통합 계획을 검토합니다.
6단계: App Protection CA 지원
스테이지 Goals
- iOS 앱 내에서 앱 보호 조건부 액세스를 지원하는 데 사용할 수 있는 다양한 API에 대해 알아봅니다.
- 앱 및 사용자에게 앱 보호 조건부 액세스를 통합합니다.
- 앱 및 사용자와 위의 통합을 테스트합니다.
의존 관계
Intune SDK 외에도 앱에서 App Protection CA를 사용하도록 설정하려면 이러한 두 구성 요소가 필요합니다.
- iOS Authenticator 앱
- MSAL 인증 라이브러리 1.0 이상
MAM-CA 수정 흐름
MAM 규정 준수 프로세스 흐름
새 API
대부분의 새 API는 IntuneMAMComplianceManager.h에서 찾을 수 있습니다. 앱은 아래에 설명된 동작의 세 가지 차이점을 알고 있어야 합니다.
새 동작 | 설명 |
---|---|
앱 → ADAL/MSAL: 토큰 획득 | 애플리케이션이 토큰을 획득하려고 하면 ERROR_SERVER_PROTECTION_POLICY_REQUIRED 받을 준비가 되어 있어야 합니다. 앱은 초기 계정 추가 흐름 중에 또는 애플리케이션 수명 주기의 뒷부분에서 토큰에 액세스할 때 이 오류를 받을 수 있습니다. 앱이 이 오류를 수신하면 액세스 토큰이 부여되지 않으며 서버 데이터를 검색하기 위해 수정해야 합니다. |
앱 → Intune SDK: remediateComplianceForIdentity 호출 | 앱이 ADAL에서 ERROR_SERVER_PROTECTION_POLICY_REQUIRED 받거나 MSAL에서 MSALErrorServerProtectionPoliciesRequired를 받으면 [[IntuneMAMComplianceManager instance] remediateComplianceForIdentity]를 호출하여 Intune 앱을 등록하고 정책을 적용할 수 있도록 해야 합니다. 이 호출 중에 앱을 다시 시작할 수 있습니다. 앱을 다시 시작하기 전에 상태를 저장해야 하는 경우 IntuneMAMPolicyDelegate의 restartApplication 대리자 메서드에서 이 작업을 수행할 수 있습니다. remediateComplianceForIdentity는 registerAndEnrollAccount 및 loginAndEnrollAccount의 모든 기능을 제공합니다. 따라서 앱은 이러한 이전 API 중 하나를 사용할 필요가 없습니다. |
Intune → 앱: 위임 수정 알림 | Intune 정책을 검색하고 적용한 후 IntuneMAMComplianceDelegate 프로토콜을 사용하여 앱에 결과를 알 수 있습니다. 앱이 각 오류를 처리하는 방법에 대한 자세한 내용은 IntuneComplianceManager.h의 IntuneMAMComplianceStatus를 참조하세요. IntuneMAMComplianceCompliant를 제외한 모든 경우 사용자에게 유효한 액세스 토큰이 없습니다. 앱에 이미 관리 콘텐츠가 있고 규격 상태 입력할 수 없는 경우 애플리케이션은 선택적 초기화를 호출하여 회사 콘텐츠를 제거해야 합니다. 규격 상태에 도달할 수 없는 경우 앱은 withErrorMessage 및 andErrorTitle에서 제공하는 오류 메시지 및 제목 문자열을 지역화하여 표시해야 합니다. |
IntuneMAMComplianceDelegate의 hasComplianceStatus 메서드 예제
(void) accountId:(NSString*_Nonnull) accountId hasComplianceStatus:(IntuneMAMComplianceStatus) status withErrorMessage:(NSString*_Nonnull) errMsg andErrorTitle:(NSString*_Nonnull) errTitle
{
switch(status)
{
case IntuneMAMComplianceCompliant:
{
/*
Handle successful compliance
*/
break;
}
case IntuneMAMComplianceNotCompliant:
case IntuneMAMComplianceNetworkFailure:
case IntuneMAMComplianceUserCancelled:
case IntuneMAMComplianceServiceFailure:
{
UIAlertController* alert = [UIAlertController alertControllerWithTitle:errTitle
message:errMsg
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {exit(0);}];
[alert addAction:defaultAction];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alert animated:YES completion:nil];
});
break;
}
case IntuneMAMComplianceInteractionRequired:
{
[[IntuneMAMComplianceManager instance] remediateComplianceForAccountId:accountId silent:NO];
break;
}
}
}
func accountId(_ accountId: String, hasComplianceStatus status: IntuneMAMComplianceStatus, withErrorMessage errMsg: String, andErrorTitle errTitle: String) {
switch status {
case .compliant:
//Handle successful compliance
case .notCompliant, .networkFailure,.serviceFailure,.userCancelled:
DispatchQueue.main.async {
let alert = UIAlertController(title: errTitle, message: errMsg, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
exit(0)
}))
self.present(alert, animated: true, completion: nil)
}
case .interactionRequired:
IntuneMAMComplianceManager.instance().remediateCompliance(forAccountId: accountId, silent: false)
}
MSAL/ADAL
앱은 MSAL/ADAL 구성에 클라이언트 기능 변수를 추가하여 App Protection CA에 대한 지원을 나타내야 합니다. 다음 값이 필요합니다. claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}
MSALPublicClientApplicationConfig 클래스 참조(azuread.github.io)
MSALAADAuthority *authority = [[MSALAADAuthority alloc] initWithURL:[[NSURL alloc] initWithString:IntuneMAMSettings.aadAuthorityUriOverride] error:&msalError];
MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc]
initWithClientId:IntuneMAMSettings.aadClientIdOverride
redirectUri:IntuneMAMSettings.aadRedirectUriOverride
authority:authority];
/*
IF YOU'RE IMPLEMENTING CA IN YOUR APP, PLEASE PAY ATTENTION TO THE FOLLOWING...
*/
// This is needed for CA!
// This line adds an option to the MSAL token request so that MSAL knows that CA may be active
// Without this, MSAL won't know that CA could be activated
// In the event that CA is activated and this line isn't in place, the auth flow will fail
config.clientApplicationCapabilities = @[@"protapp"];
guard let authorityURL = URL(string: kAuthority) else {
print("Unable to create authority URL")
return
}
let authority = try MSALAADAuthority(url: authorityURL)
let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID,redirectUri: kRedirectUri,
authority: authority)
msalConfiguration.clientApplicationCapabilities = ["ProtApp"]
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
MAM SDK 규정 준수 수정 API의 accountId 매개 변수에 대한 Microsoft Entra 개체 ID를 가져오려면 다음 단계를 수행해야 합니다.
- 먼저 앱에 ERROR_SERVER_PROTECTION_POLICY_REQUIRED 보고할 때 MSAL에서 다시 전송된 MSALError 개체 내의 userInfo[MSALHomeAccountIdKey]에서 homeAccountId를 가져옵니다.
- 이 homeAccountId는 ObjectId.TenantId 형식입니다. '.'의 문자열을 분할하여 ObjectId 값을 추출한 다음 수정 API remediateComplianceForAccountId에서 accountId 매개 변수에 해당 값을 사용합니다.
종료 조건
App Protection CA에 대한 테스트 사용자 구성
- 관리자 자격 증명으로 에 로그인합니다 https://portal.azure.com.
- Microsoft Entra ID>보안>조건부 액세스>새 정책을 선택합니다. 새 조건부 액세스 정책을 만듭니다.
- 다음 항목을 설정하여 조건부 액세스 정책을 구성합니다.
- 이름 필드를 입력합니다.
- 정책을 사용하도록 설정합니다.
- 사용자 또는 그룹에 정책 할당
- 클라우드 앱을 할당합니다. 모든 클라우드 앱포함>을 선택합니다. 경고 정보로 이 설정을 잘못 구성하지 않도록 주의해야 합니다. 예를 들어 모든 클라우드 앱을 제외한 경우 콘솔에서 자신을 잠급니다.
- 액세스 제어 권한 부여앱 보호 정책 필요를 선택하여 액세스 > 제어를 부여합니다>.
- 정책 구성이 완료되면 만들기 를 선택하여 정책을 저장하고 적용합니다.
- 정책 사용 설정
- 또한 사용자가 MAM 정책의 대상이 되도록 해야 합니다.
테스트 사례
테스트 사례 | 테스트 방법 | 예상 결과 |
---|---|---|
MAM-CA는 항상 적용됨 | 앱에 등록하기 전에 사용자가 App Protection CA 및 MAM 정책의 대상이 되는지 확인합니다. | 앱이 위에서 설명한 수정 사례를 처리하고 앱이 액세스 토큰을 가져올 수 있는지 확인합니다. |
사용자가 등록한 후 적용된 MAM-CA | 사용자는 앱에 이미 로그인되어 있어야 하지만 App Protection CA의 대상은 아닙니다. | 콘솔에서 App Protection CA에 대한 사용자를 대상으로 지정하고 MAM 수정을 올바르게 처리했는지 확인합니다. |
MAM-CA 비준수 | App Protection CA 정책을 설정하지만 MAM 정책을 할당하지 마세요. | 사용자는 액세스 토큰을 획득할 수 없습니다. 이는 앱이 IntuneMAMComplianceStatus 오류 사례를 처리하는 방법을 테스트하는 데 유용합니다. |
다음 단계
위의 모든 종료 조건을 완료하면 앱이 App Protection CA 지원과 성공적으로 통합됩니다. 후속 섹션인 7단계: 웹 보기 기능은 앱의 원하는 앱 보호 정책 지원에 따라 필요하거나 필요하지 않을 수 있습니다.