¿Cómo funcionaría la sustitución de tokens de portador con HMAC en OAuth 2.0, y cómo se validaría el cliente / servidor?

6

Esta clase de Pluralsight analiza los tokens del Portador , y que una de las cosas que faltan en OAuth 2.0 es la validación basada en HMAC. En otros lugares de los blogs de thinktecture, se llaman tokens PoP (Prueba de Posesión)

La validación basada en HMAC evitaría los ataques basados en CSRF donde el intercambio del token de portador daría lugar a una suplantación.

Lo que me confundió fue que en una de las diapositivas sobre los riesgos de OAuth 2.0, Dominic Baier comentó que esta validación ocurriría en el cliente.

La validación basada en HMAC nunca se agregó a la especificación OAuth, y su omisión fue una razón clave por la cual Eran Hammer (autor original de OAuth) decidió eliminar su nombre de la especificación.

Al profundizar en esto, estoy un poco confundido sobre cómo serían los tokens HMAC en OAuth:

  1. Construido en code o implicit flujos
  2. ¿Cómo validaría el cliente estos tokens HMAC? ¿Debo suponer que esto es solo para aplicaciones de SPA?
  3. ¿La construcción JWT en OpenID Connect resuelve todas las preocupaciones de HMAC en OAuth 2.0?
pregunta random65537 10.08.2016 - 05:47
fuente

2 respuestas

3

Cualquiera que sea el flujo, el token de MAC se generaría de la misma manera: una clave secreta simétrica y una identificación se envían al cliente una vez . Este secreto nunca más se envía por cable.

El cliente no valida el token * , el cliente lo usa como lo haría con un token de portador, excepto que el secreto no se envía por el cable y por lo tanto no se puede filtrar:

  +--------------+                                        +--------------+
  |              |>------Request with authenticator------>|              |
  |              |                                        |   Resource   |
  |    Client    |                                        |    server    |
  |              |<--------Requested resource------------<|              |
  |              |                                        +--------------+
  +--------------+                                                ^
         ^                                                        |
         |                                                        |
         |                                                        |
         |                                                        |
         |                                                 MAC algorithm  
   MAC algorithm                                           over key+params
   over key+params

El cliente construye el autenticador calculando un MAC usando la clave secreta y algunos parámetros (que incluye el ID de token, un nonce, una marca de tiempo y algunos otros datos), y lo adjunta a la solicitud.

El servidor de recursos (o un tercer servidor que RS usa para validar tokens) conoce esta clave secreta, por lo que realiza los mismos cálculos que hizo el cliente usando los mismos parámetros. Si todo coincide, procede con la solicitud.

El servidor también tiene la tarea de prevenir los ataques de reproducción al verificar la marca de tiempo y evitar la reutilización.

Esto protege de nuevo muchos escenarios en los que se podría filtrar el token: error / configuración de TLS, puntos finales controlados por el atacante que encuentran su camino en la base de datos del cliente, etc.

Con respecto a su tercera pregunta, sí y no. El borrador de la especificación de MAC de OAuth2 define algunas afirmaciones de JWT para codificar el la información requerida para la emisión y el uso de tokens MAC utilizando JWT, pero OpenID Connect sigue usando tokens de portador.

La principal preocupación con los tokens de portador es que el desarrollador del cliente debe ser muy consciente de la seguridad, y que su seguridad depende exclusivamente de TLS.

Mucha gente entiende mal esta última afirmación y concluye que OAuth2 es intrínsecamente insegura e inútil y está condenada. Peor aún, repiten ciegamente este tipo de conclusiones en charlas, publicaciones y comentarios, y simplemente confunden a la gente.

OAuth2 es muy bueno para algunos casos de uso y apesta para otros. Requiere una buena comprensión de algunos principios de seguridad. Requiere algunos compromisos también. Pero está ahí fuera, está funcionando y resuelve un problema muy difícil.

El uso de MAC nunca se estandarizó, pero el borrador es bastante bueno y fácil de implementar. Hoy también hay varias alternativas.

(*) : Quiero decir que el cliente no realiza la validación de MAC. Por supuesto, la audiencia y otros campos aún deben validarse.

    
respondido por el GnP 12.09.2016 - 19:43
fuente
0

El OAuth WG está desarrollando una gran extensión de seguridad que permite vincular tokens de acceso a un certificado X.509 del cliente. Relativamente simple de implementar con clientes y servidores de recursos, y también funciona con clientes públicos: enlace

    
respondido por el Vladimir Dzhuvinov 18.08.2017 - 12:04
fuente

Lea otras preguntas en las etiquetas