SDK do Aplicativo do Intune para iOS – Suporte da AC para Proteção do Aplicativo (opcional)

O Acesso Condicional de Proteção do Aplicativo bloqueia o acesso aos tokens do servidor até que o Intune confirme que a política de proteção do aplicativo foi aplicada. Esse recurso exige alterações nos fluxos de usuário adicionados. Depois que um cliente habilitar a AC de Proteção de Aplicativo, os aplicativos no locatário desse cliente que acessarem recursos protegidos não poderão adquirir um token de acesso, a menos que dêem suporte a esse recurso.

Observação

Este guia é dividido em várias etapas distintas. Comece revisando o Estágio 1: Planeje a integração.

Etapa 6: suporte da Autoridade de Certificação de Proteção de Aplicativo

Objetivos do Estágio

  • Saiba mais sobre as diferentes APIs que podem ser usadas para dar suporte ao Acesso Condicional de Proteção de Aplicativo no aplicativo iOS
  • Integre o Acesso Condicional de Proteção de Aplicativo ao seu aplicativo e usuários.
  • Teste a integração acima com seu aplicativo e usuários.

Dependências

Além do SDK do Intune, você precisa destes dois componentes para habilitar a AC de Proteção de Aplicativo em seu aplicativo.

  1. Aplicativo iOS Authenticator
  2. Biblioteca de autenticação MSAL 1.0 ou superior

Fluxo de correção MAM-CA

Diagrama do fluxo de correção MAM-CA.

Fluxo do processo de conformidade do MAM

Diagrama do fluxo do processo de conformidade de MAM.

Novas APIs

A maioria das novas APIs pode ser encontrada no IntuneMAMComplianceManager.h. O aplicativo precisa estar ciente de três diferenças de comportamento explicadas abaixo.

Novo comportamento Descrição
App → ADAL/MSAL: Adquirir token Quando um aplicativo tenta adquirir um token, ele deve estar preparado para receber um ERROR_SERVER_PROTECTION_POLICY_REQUIRED. O aplicativo pode receber esse erro durante o fluxo inicial de adição de conta ou ao acessar um token posteriormente no ciclo de vida do aplicativo. Quando o aplicativo receber esse erro, ele não receberá um token de acesso e precisará ser corrigido para recuperar os dados do servidor.
SDK do → Intune do aplicativo: Chamar remediateComplianceForIdentity Quando um aplicativo recebe um ERROR_SERVER_PROTECTION_POLICY_REQUIRED da ADAL ou MSALErrorServerProtectionPoliciesRequired da MSAL, ele deve chamar [[IntuneMAMComplianceManager instance] remediateComplianceForIdentity] para permitir que Intune registre o aplicativo e aplique a política. O aplicativo pode ser reiniciado durante esta chamada. Se o aplicativo precisar salvar o estado antes de reiniciar, ele poderá fazer isso no método delegado restartApplication em IntuneMAMPolicyDelegate.

remediateComplianceForIdentity fornece todas as funcionalidades de registerAndEnrollAccount e loginAndEnrollAccount. Portanto, o aplicativo não precisa usar nenhuma dessas APIs mais antigas.
Aplicativo Intune →: Delegar notificação de correção Depois que o Intune tiver recuperado e aplicado políticas, ele notificará o aplicativo sobre o resultado usando o protocolo IntuneMAMComplianceDelegate. Consulte IntuneMAMComplianceStatus em IntuneComplianceManager.h para obter informações sobre como o aplicativo deve lidar com cada erro. Em todos os casos, exceto IntuneMAMComplianceCompliant, o usuário não terá um token de acesso válido.

Se o aplicativo já tiver conteúdo gerenciado e não puder inserir um status compatível, o aplicativo deverá chamar o apagamento seletivo para remover qualquer conteúdo corporativo.

Se não conseguirmos chegar a um estado compatível, o aplicativo deverá exibir a mensagem de erro localizada e a cadeia de caracteres de título fornecida por withErrorMessage e andErrorTitle.

Exemplo do método hasComplianceStatus de IntuneMAMComplianceDelegate

(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

Os aplicativos precisam indicar suporte para a AC de Proteção de Aplicativo adicionando a variável de recursos do cliente à configuração MSAL/ADAL. Os seguintes valores são necessários: claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}

Referência de classe 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)

Para buscar a ID do objeto do Microsoft Entra para o parâmetro accountId das APIs de correção de conformidade do MAM SDK, você precisa seguir as seguintes etapas:

  • Primeiro, obtenha o homeAccountId do userInfo [MSALHomeAccountIdKey] no objeto MSALError enviado de volta pela MSAL quando ele relata ERROR_SERVER_PROTECTION_POLICY_REQUIRED ao aplicativo.
  • Este homeAccountId está no formato ObjectId.TenantId. Extraia o valor de ObjectId dividindo a cadeia de caracteres no '.' e use esse valor para o parâmetro accountId na API de correção remediateComplianceForAccountId.

Critérios de saída

Configurando um usuário de teste para a Autoridade de Certificação de Proteção do Aplicativo

  1. Entre com suas credenciais de administrador no https://portal.azure.com.
  2. Selecione o Acesso Condicional>do Microsoft Entra ID>Criar nova política. Crie uma nova política de Acesso Condicional.
  3. Configure a política de acesso condicional definindo os seguintes itens:
    • Preenchendo o campo Nome .
    • Habilitando a política.
    • Atribuindo a política a um usuário ou grupo.
  4. Atribuir aplicativos de nuvem. Selecione Incluir>Todos os aplicativos de nuvem. Como o aviso observa, tome cuidado para não configurar incorretamente essa configuração. Por exemplo, se você excluísse todos os aplicativos em nuvem, bloquearia a si mesmo fora do console.
  5. Conceda controles de acesso selecionando Controles> de AcessoConceder Acesso>Requer política de proteção do aplicativo.
  6. Quando terminar de configurar a política, selecione Criar para salvar a política e aplicá-la.
  7. Habilitar a política.
  8. Você também precisa garantir que os usuários sejam direcionados para políticas de MAM.

Casos de teste

Caso de teste Como testar Resultado esperado
MAM-CA sempre aplicado Certifique-se de que o usuário seja direcionado para a política de CA de Proteção de Aplicativos e MAM antes de se registrar em seu aplicativo. Verifique se o aplicativo lida com os casos de correção descritos acima e se o aplicativo pode obter um token de acesso.
MAM-CA aplicado após o usuário inscrito O usuário já deve estar conectado ao aplicativo, mas não deve ser direcionado para a AC de Proteção de Aplicativo. Direcione o usuário para a AC de Proteção de Aplicativo no console e verifique se você manipula corretamente a correção de MAM
Não conformidade do MAM-CA Configure uma política de CA de Proteção de Aplicativo, mas não atribua uma política de MAM. O usuário não deve ser capaz de adquirir um token de acesso. Isso é útil para testar como seu aplicativo lida com casos de erro IntuneMAMComplianceStatus.

Próximas etapas

Depois de concluir todos os Critérios de Saída acima, seu aplicativo agora está integrado com êxito ao suporte da AC de Proteção de Aplicativo. A seção subsequente, Estágio 7: recursos de exibição da Web podem ou não ser necessários, dependendo do suporte desejado da política de proteção do aplicativo do aplicativo.