Share via


Escritura de un autenticador SPNEGO para Microsoft Edge en Android

Los terceros pueden habilitar la autenticación SPNEGO en Microsoft Edge para Android. Para proporcionar esta autenticación, deben proporcionar un autenticador SPNEGO. En este artículo se describe la interfaz entre Edge y SPNEGO Authenticator.

Introducción

El autenticador SPNEGO lo proporciona un servicio Android. El autenticador debe incorporarse en una aplicación, proporcionada por el tercero, instalada en el dispositivo del usuario. La aplicación es responsable de administrar las cuentas usadas para la autenticación SPNEGO y de toda la comunicación con el servidor SPNEGO.

SPNEGO Authenticator es una cuenta de AndroidAuthenticator. Por lo tanto, debe seguir el patrón descrito en AbstractAccountAuthenticator. Debe implementar una clase autenticadora derivada de AbstractAccountAuthenticator.

SpNEGO Authenticator debe definir un nuevo tipo de cuenta. El nombre del tipo de cuenta debe derivarse del nombre de dominio del escritor (por ejemplo, com.example.spnego). El tipo de cuenta debe definirse para usar customTokens y debe admitir la característica "SPNEGO" (HttpNegotiateConstants.SPNEGO_FEATURE).

Interfaz a Microsoft Edge

Edge busca el autenticador SPNEGO a través del tipo de cuenta de Android que proporciona. El tipo de cuenta definido por el autenticador se pasa a Edge a través de la directiva AuthAndroidNegotiateAccountType .

La interfaz a Edge se realiza a través del marco de administración de cuentas de Android, a través de AbstractAccountManager.getAuthToken en particular. Edge, en org.chromium.net.HttpNegotiateConstants , define algunas claves y valores más que se usan en los argumentos para getAuthTokeny en la agrupación de resultados devuelta.

Argumentos getAuthToken

Cuando se llama a getAuthToken, authTokenType es "SPNEGO:HOSTBASED:<spn" donde <spn>> es la entidad de seguridad de la solicitud. Siempre será una entidad de seguridad basada en host en la implementación actual. Las versiones futuras pueden permitir otros tipos de entidades de seguridad, pero si lo hacen, usan un prefijo diferente. SpNEGO Authenticators debe comprobar el prefijo.

La options agrupación contiene estas claves:

Si se trata de la segunda o posterior ronda de una secuencia de autenticación multi round, también contiene las claves siguientes.

  • HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN - El token entrante del encabezado WWW-Authenticate, codificado en Base64.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - Contexto SPNEGO proporcionado por el autenticador en la ronda anterior. Microsoft Edge trata esta agrupación como un objeto opaco y simplemente lo conserva entre rondas.

Agrupación de resultados de getAuthToken

El conjunto de resultados final de getAuthToken (devuelto como el valor devuelto de o a través de getAuthTokenAccountAuthenticatorResponse) debe contener el nombre de la cuenta, el tipo de cuenta y el token tal como se define en la documentación de Android. Además, la agrupación debe contener estas claves:

  • HttpNegotiateConstants.KEY_SPNEGO_RESULT - el código de resultado de SPNEGO. Debe ser uno de los valores definidos en HttpNegotiateConstants.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT : un contexto que se va a devolver al autenticador en la siguiente ronda de autenticación. Esto solo es necesario si la autenticación está incompleta.

Recomendaciones de implementación

Las siguientes recomendaciones deben tenerse en cuenta al implementar un autenticador SPNEGO.

  • Cada cuenta proporcionada por un autenticador de cuenta DE SPNEGO debe corresponder a una única entidad de seguridad de usuario (cuenta) proporcionada por un único centro de distribución de claves.

  • El autenticador de la cuenta no debe almacenar ninguna contraseña. En su lugar, debe almacenar TGT para las entidades de seguridad de usuario y requerir que los usuarios vuelvan a escribir sus contraseñas (u otros datos de autenticación) cuando expire su TGT.

  • El autenticador de cuenta debe mantener una lista de aplicaciones autorizadas (o firmas de aplicación) para cada cuenta y negarse a proporcionar tokens de servicio a otras aplicaciones. La lista de aplicaciones autorizadas puede ser:

    • Integrado en el autenticador de la cuenta.
    • Configurable por el administrador del sistema.
    • Configurable por el usuario. En este caso, el autenticador de cuenta podría optar por permitir que el usuario autorice las nuevas aplicaciones dinámicamente cuando solicite acceso por primera vez.

    El autenticador puede obtener el uid de la aplicación que realiza la llamada mediante el campo KEY_CALLER_UID del lote de opciones y, a continuación, identificar la aplicación solicitante mediante context.getPackageManager().getNameForUid() o una llamada similar.

    Esto es necesario para asegurarse de que las aplicaciones malintencionadas que ejecuta el usuario no pueden usar las credenciales del usuario para acceder a los servicios de maneras no intencionadas. Esto es importante porque el uso de la opción de tokens personalizados (como se describió anteriormente) deshabilita la propia comprobación de firma de Android al obtener tokens de autenticación.

  • A menos que esté integrado en el autenticador de cuentas, el administrador del sistema o el usuario deben poder configurar la ubicación del centro de distribución de claves.

Códigos de error mostrados en Microsoft Edge

Además de los códigos de error que se pueden reenviar desde la aplicación autenticadora, se pueden mostrar los siguientes errores al intentar autenticar una solicitud:

  • ERR_MISSING_AUTH_CREDENTIALS: La información de la cuenta no se puede usar. Se puede generar por cualquiera de los siguientes motivos.
    • El usuario no ha iniciado sesión en la aplicación autenticadora y no se encuentra ninguna cuenta apta.
    • La información de la cuenta no se puede obtener porque la aplicación actual no tiene los permisos necesarios.
    • Hay más de una cuenta apta y no se puede obtener una selección del usuario.
  • ERR_UNEXPECTED: Se ha producido un error inesperado y se ha terminado la solicitud.
  • ERR_MISCONFIGURED_AUTH_ENVIRONMENT: La autenticación no se puede completar debido a algunos problemas en la configuración de la aplicación. Es posible que falten algunos permisos.

Use Logcat para buscar la etiqueta de cr_net_auth en el registro del sistema para obtener más información sobre la causa de estos errores.

Uso del autenticador con Microsoft Edge

Edge usa varias directivas para controlar el uso de la autenticación SPNEGO. Para habilitar la autenticación SPNEGO, se debe configurar AuthServerAllowList y AuthAndroidNegotiateAccountType debe coincidir con el tipo de cuenta proporcionado por el autenticador SPNEGO.

Licencia de contenido

Nota

Algunas partes de esta página son modificaciones que se basan en trabajo creado y compartido por Chromium.org y que se usan de acuerdo con los términos descritos en la Licencia internacional de Creative Commons Atribution 4.0. La página original se puede encontrar aquí.

Licencia de Creative Commons
Este trabajo dispone de licencia conforme a Licencia internacional de Creative Commons Attribution 4.0.

Ver también