Citrix ADC

Autenticación de API con el dispositivo Citrix ADC

Hay un cambio de paradigma en la forma en que las aplicaciones modernas interactúan con sus clientes. Tradicionalmente, los clientes de explorador se utilizaban para acceder a servicios. Las aplicaciones suelen establecer cookies de sesión para rastrear el contexto del usuario. Las aplicaciones modernas y distribuidas dificultan el mantenimiento de sesiones de usuario en los microservicios. Debido a esto, la mayoría de los accesos a la aplicación se han convertido en API. Los clientes que se comunican con estos servicios distribuidos también han evolucionado. La mayoría de los clientes obtienen tokens de una entidad de confianza llamada Servidor de autorización para probar la identidad y el acceso del usuario. Estos clientes luego presentan el token a la aplicación con cada solicitud de acceso. Por lo tanto, los dispositivos proxy tradicionales como Citrix ADC deben evolucionar para admitir estos clientes. Un dispositivo Citrix ADC proporciona a los administradores una forma de manejar dicho tráfico. Citrix ADC se puede implementar como API Gateway para front-end todo el tráfico destinado a los servicios publicados. Una API Gateway se puede implementar para entornos nativos tradicionales (Hybrid Multi Cloud o HMC) o en la nube. API Gateway finaliza todo el tráfico entrante para ofrecer varios servicios como autenticación, autorización, limitación de velocidad, enrutamiento, almacenamiento en caché, descarga SSL, firewall de aplicaciones, etc. Por lo tanto, se convierte en un componente crítico de la infraestructura.

Tipos de token

Los tokens intercambiados durante el acceso a la API se ajustan principalmente al protocolo OAuth/OpenID Connect (OIDC). Los tokens de acceso que se usan solo para ‘acceso delegado’ se ajustan al protocolo OAuth, mientras que los tokens de ID que cumplen con OIDC también llevan información de usuario. Los tokens de acceso son normalmente un blob de datos opaco o aleatorio. Sin embargo, a veces pueden ser identificados tokens de acuerdo con los estándares JWT (Json Web Token). Los tokens de ID siempre están firmados JWT.

Acceso a API con OAuth

El tipo de autenticación OAuth en un dispositivo Citrix ADC se puede usar para manejar protocolos OAuth y OIDC. OIDC es una extensión del protocolo OAuth.

OAuthAction en un dispositivo Citrix ADC se puede utilizar para gestionar clientes interactivos, como exploradores y clientes nativos, como aplicaciones cliente. Los clientes interactivos se redirigen al proveedor de identidad para iniciar sesión mediante el protocolo OIDC. Los clientes nativos pueden obtener tokens fuera de banda y pueden presentarlos en un dispositivo Citrix ADC para acceder a ellos.

Nota: El token de acceso obtenido de los endpoints se puede almacenar en caché para solicitudes posteriores, mejorando así el rendimiento de la API.

Para configurar la compatibilidad con el almacenamiento en caché de tokens mediante la interfaz de línea de comandos, escriba el siguiente comando en el símbolo del sistema:

set aaaparameter –apITokenCache <ENABLED>

En las secciones siguientes se describe el método de acceso API realizado por clientes nativos.

Servidor virtual para acceso a API

Para implementar un dispositivo Citrix ADC para un acceso API, se implementa un servidor virtual Traffic Management (TM) con la autenticación 401. Se asocia con un servidor virtual de autenticación (autenticación, autorización y auditoría) para contener las directivas de autenticación y sesión. El siguiente fragmento de configuración crea uno de estos servidores virtuales.

Add lb vserver lb-api-access SSL <IP> 443 -authn401 On -AuthnVsName auth-api-access

Bind ssl vserver lb-api-access -certkeyName <ssl-cert-entity>

Add authentication vserver auth-api-access SSL

Nota: Tendría que vincular un servicio al servidor virtual de TM y una directiva de autenticación (con OAuthAction descrita de la siguiente manera) al servidor virtual de autenticación para completar la configuración.

Después de crear el servidor virtual, es necesario agregar una OAuthAction junto con la directiva correspondiente. Hay varias otras opciones dentro de una acción de OAuth dependiendo del tipo de token y otros mecanismos de seguridad.

Configuración de OAuth para tokens de ID

Los tokens de ID siempre están firmados JWT. Es decir, llevan encabezado, carga útil y firma. Dado que se trata de tokens independientes, un dispositivo Citrix ADC puede validar estos tokens localmente. Para validar estos tokens, el dispositivo necesitaría conocer la clave pública de la clave privada correspondiente utilizada para firmar estos tokens.

Lo que sigue es un ejemplo de OAuthAction con ciertos argumentos obligatorios junto con “CertendPoint”.

Add authentication OAuthAction oauth-api-access -clientid <your-client-id> -clientsecret <your-client-secret> -authorizationEndpoint <URL to which users would be redirected for login> -tokenEndpoint <endpoint at which tokens could be obtained> -certEndpoint <uri at which public keys of IdP are published>

Donde:

  • ID de cliente: Cadena única que identifica SP. El servidor de autorización deduce la configuración del cliente mediante este ID. Longitud máxima: 127.

  • Secreto del cliente: Cadena secreta establecida por el usuario y el servidor de autorización. Longitud máxima: 239.

  • AuthorizationEndPoint: URL en la que los usuarios normalmente iniciarían sesión (cuando usan clientes interactivos).

  • TokenEndPoint: URL en el servidor de autorización en el que se obtienen/intercambian tokens/código

  • CertendPoint: URL en la que el Servidor de autorización publica claves públicas utilizadas para firmar los tokens. El Servidor de autorización puede publicar más de una clave y elegir una de ellas para firmar tokens.

Nota: Identificación de cliente/Secreto de client/AuthorizationEndPoint/TokenEndpoint son parámetros opcionales para API Access. Sin embargo, es una buena práctica proporcionar valores para estos parámetros, ya que la entidad de acción puede reutilizarse para diferentes propósitos.

En la configuración anterior ‘CertPointPoint’ es esencial para la validación de ID Token. Este extremo contiene claves públicas del certificado utilizado para firmar los tokens. Estas claves públicas deben corresponder a la especificación JWK (Json Web Keys).

Una vez configurado CertendPoint en el dispositivo Citrix ADC, sondea periódicamente el endpoint (con el intervalo predeterminado de 1 día que puede personalizarse en la configuración) para mantener actualizadas las claves públicas. Después de que las claves públicas estén disponibles, ADC puede realizar la validación local de los tokens de identificación entrantes.

Ilustración 1. Flujo de OAuth para tokens de ID

Flujo de OAuth para tokens de ID

Configuración de OAuth para tokens de acceso opaco

Los tokens opacos no se pueden verificar localmente en el dispositivo Citrix ADC. Estos deben validarse en el servidor de autorización. Un dispositivo Citrix ADC utiliza el “protocolo de introspección” mencionado en las especificaciones de OAuth para verificar estos tokens. Una nueva opción, IntrospectURL, se proporciona en la configuración de OAuth para verificar tokens opacos.

Set oauthAction oauth-api-acccess -introspectURL <uri of the Authorization Server for introspection>

Ilustración 2. Flujo de OAuth para tokens de acceso

Flujo de OAuth para tokens de acceso

El formato de la API de introspección se ajusta a la especificación de la https://tools.ietf.org/html/rfc7662#section-2.1 siguiente manera:

POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=mF_9.B5f-4.1JqM&token_type_hint=access_token

Directiva de enlace a Authentication vserver

Una vez creada OAuthAction, es necesario crear la directiva correspondiente para invocarla.

add authentication policy oauth-api-access -rule <> -action <oauth-api-access>```

bind authentication vserver auth-api-access -policy oauth-api-access -pri 100

Configuración de seguridad adicional en un dispositivo Citrix ADC

La validación de token incluye comprobaciones de duración del token. Los tokens fuera del tiempo aceptable se rechazan. A continuación se presentan los ajustes adicionales para mayor seguridad. Algunos de estos se recomiendan para ser configurados siempre.

Audiencia: OAuth Action se puede configurar con un destinatario previsto del token. Todos los tokens se comparan con esta URL configurada. Un dispositivo Citrix ADC tiene una capacidad adicional en la que el campo de audiencia apunta realmente a un patrón establecido en el dispositivo. Con este conjunto de patrones, un administrador puede configurar más de una URL para la audiencia.

Add policy patset oauth_audiences

Bind patset oauth_audiences https://app1.company.com

Bind patset oauth_audiences https://app2.company.com

Bind patset oauth_audiences httpsL//app1.company.com/path1

Set oAuthAccess oauth-api-access -audience oauth_audiences

En el ejemplo anterior, se especifica más de una audiencia en un conjunto de patrones. Por lo tanto, solo se permite un token entrante si contiene cualquiera de las direcciones URL configuradas en el conjunto de patrones.

Emisor: Identidad del servidor cuyos tokens deben ser aceptados. Longitud máxima: 127. Es una buena práctica configurar el emisor de los tokens en la acción OAuth. Esto garantiza que los tokens emitidos por el Servidor de autorización incorrecto no están permitidos.

SkewTime: Especifica el sesgo de reloj permitido en el número de minutos que permite un dispositivo Citrix ADC en un token entrante. Por ejemplo, si SkewTime es 10, entonces el token sería válido desde (hora actual: 10) min hasta (hora actual + 10) min, es decir 20 min en total. Valor predeterminado: 5

AllowedAlgorithms: Esta opción permite al administrador restringir ciertos algoritmos en los tokens entrantes. De forma predeterminada, todos los métodos admitidos están permitidos. Sin embargo, estos se pueden controlar mediante esta opción.

La siguiente configuración garantiza que solo se permiten los tokens que utilizan RS256 y RS512:

Set oAuthAction oauth-api-access -allowedAlgorithms RS256 RS512

Después de la configuración anterior, solo se permiten tokens que usan RS256 y RS512.

Omitir cierto tráfico de la autenticación

En muchos casos, hay algunas API de descubrimiento que son accesibles públicamente para los clientes. Estas API suelen revelar la configuración y las capacidades del propio servicio. Un administrador puede configurar el dispositivo Citrix ADC para que omita la autenticación de estas direcciones URL de metadatos mediante la directiva “Sin autenticación” que se describe a continuación:

Add authentication policy auth-bypass-policy -rule <> -action NO_AUTHN
Bind authentication vserver auth-api-access -policy auth-bypass-policy -pri 110

NO_AUTHN es una acción implícita que da como resultado que la autenticación se complete cuando la regla coincide. Hay otros usos de la acción NO_AUTHN más allá del alcance del acceso API.