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.