SDK de aplicaciones de Intune para iOS: compatibilidad con ca de App Protection (opcional)
El acceso condicional de App Protection bloquea el acceso a los tokens de servidor hasta que Intune ha confirmado que se ha aplicado la directiva de protección de aplicaciones. Esta característica requiere cambios en los flujos de usuario de adición. Una vez que un cliente habilita la CA de App Protection, las aplicaciones del inquilino de ese cliente que acceden a recursos protegidos no podrán adquirir un token de acceso a menos que admitan esta característica.
Nota:
Esta guía se divide en varias fases distintas. Para empezar, revise La fase 1: Planear la integración.
Fase 6: Compatibilidad con la CA de App Protection
Objetivos de fase
- Obtenga información sobre las distintas API que se pueden usar para admitir el acceso condicional de App Protection dentro de la aplicación iOS.
- Integre el acceso condicional de App Protection a la aplicación y a los usuarios.
- Pruebe la integración anterior con la aplicación y los usuarios.
Dependencias
Además del SDK de Intune, necesita estos dos componentes para habilitar la ENTIDAD de certificación de App Protection en la aplicación.
- Aplicación iOS Authenticator
- Biblioteca de autenticación MSAL 1.0 o posterior
Flujo de corrección de MAM-CA
Nuevas API
La mayoría de las nuevas API se pueden encontrar en IntuneMAMComplianceManager.h. La aplicación debe tener en cuenta tres diferencias de comportamiento que se explican a continuación.
Nuevo comportamiento | Descripción |
---|---|
App → ADAL/MSAL: Adquisición del token | Cuando una aplicación intenta adquirir un token, debe estar preparada para recibir un ERROR_SERVER_PROTECTION_POLICY_REQUIRED. La aplicación puede recibir este error durante el flujo de adición de la cuenta inicial o al acceder a un token más adelante en el ciclo de vida de la aplicación. Cuando la aplicación recibe este error, no se le concederá un token de acceso y debe corregirse para recuperar los datos del servidor. |
SDK de Intune → aplicación: llamar a remediateComplianceForIdentity | Cuando una aplicación recibe un ERROR_SERVER_PROTECTION_POLICY_REQUIRED de ADAL o MSALErrorServerProtectionPoliciesRequired de MSAL, debe llamar a [[Instancia de IntuneMAMComplianceManager] remediateComplianceForIdentity] para permitir que Intune inscriba la aplicación y aplique la directiva. La aplicación se puede reiniciar durante esta llamada. Si la aplicación necesita guardar el estado antes de reiniciarse, puede hacerlo en el método de delegación restartApplication en IntuneMAMPolicyDelegate. remediateComplianceForIdentity proporciona toda la funcionalidad de registerAndEnrollAccount y loginAndEnrollAccount. Por lo tanto, la aplicación no necesita usar ninguna de estas API anteriores. |
Aplicación de → de Intune: delegación de la notificación de corrección | Una vez que Intune haya recuperado y aplicado directivas, notificará a la aplicación el resultado mediante el protocolo IntuneMAMComplianceDelegate. Consulte IntuneMAMComplianceStatus en IntuneComplianceManager.h para obtener información sobre cómo debe controlar la aplicación cada error. En todos los casos, excepto IntuneMAMComplianceCompliant, el usuario no tendrá un token de acceso válido. Si la aplicación ya tiene contenido administrado y no puede especificar un estado conforme, la aplicación debe llamar al borrado selectivo para quitar cualquier contenido corporativo. Si no podemos alcanzar un estado conforme, la aplicación debe mostrar localizado el mensaje de error y la cadena de título proporcionados por withErrorMessage y andErrorTitle. |
Ejemplo del 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
Las aplicaciones deben indicar la compatibilidad con la CA de App Protection mediante la adición de variables de capacidades de cliente a su configuración de MSAL/ADAL. Se requieren los siguientes valores: claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}
Referencia de clase 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 capturar el identificador de objeto Entra para el parámetro accountId de las API de corrección de cumplimiento del SDK de MAM, debe hacer lo siguiente:
- En primer lugar, obtenga el homeAccountId de userInfo[MSALHomeAccountIdKey] en el objeto MSALError devuelto por MSAL cuando notifica ERROR_SERVER_PROTECTION_POLICY_REQUIRED a la aplicación.
- Este homeAccountId tendrá el formato ObjectId.TenantId. Extraiga el valor de ObjectId dividiendo la cadena en '.' y, a continuación, use ese valor para el parámetro accountId en remediation API remediateComplianceForAccountId.
Criterios de salida
Configuración de un usuario de prueba para la CA de App Protection
- Inicie sesión con sus credenciales de administrador en https://portal.azure.com.
- SeleccioneAcceso condicional deseguridad> de >Microsoft Entra ID>Nueva directiva. Cree una nueva directiva de acceso condicional.
- Configure la directiva de acceso condicional estableciendo los siguientes elementos:
- Rellenando el campo Nombre .
- Habilitación de la directiva.
- Asignación de la directiva a un usuario o grupo.
- Asignar aplicaciones en la nube. Seleccione Incluir>todas las aplicaciones en la nube. Como se indica en las notas de advertencia, tenga cuidado de no configurar esta configuración de forma incorrecta. Por ejemplo, si excluyó todas las aplicaciones en la nube, se bloquearía a sí mismo fuera de la consola.
- Para conceder controles de acceso, seleccione Controles> deacceso Conceder acceso>Requerir directiva de protección de aplicaciones.
- Cuando haya terminado de configurar la directiva, seleccione Crear para guardar la directiva y aplicarla.
- Habilite la directiva.
- También debe asegurarse de que los usuarios están destinados a las directivas MAM.
Casos de prueba
Caso de prueba | Procedimiento de prueba | Resultado esperado |
---|---|---|
MAM-CA siempre aplicado | Asegúrese de que el usuario está destinado tanto a la CA de App Protection como a la directiva mam antes de inscribirse en la aplicación. | Compruebe que la aplicación controla los casos de corrección descritos anteriormente y que la aplicación puede obtener un token de acceso. |
MAM-CA aplicado después de que el usuario se inscriba | El usuario ya debe iniciar sesión en la aplicación, pero no debe tener como destino la CA de App Protection. | Dirigirse al usuario para la ENTIDAD de certificación de App Protection en la consola y comprobar que controla correctamente la corrección de MAM |
Incumplimiento de MAM-CA | Configure una directiva de CA de App Protection, pero no asigne una directiva mam. | El usuario no debe poder adquirir un token de acceso. Esto es útil para probar cómo controla la aplicación los casos de error IntuneMAMComplianceStatus. |
Pasos siguientes
Una vez que haya completado todos los criterios de salida anteriores, la aplicación ahora se integra correctamente con la compatibilidad con la CA de App Protection. La sección siguiente, Fase 7: Características de vista web, puede ser necesaria o no, en función de la compatibilidad deseada de la directiva de protección de aplicaciones de la aplicación.