No estoy seguro, pero estoy pensando que tal vez haya un problema XY en esta pregunta.
Esta es mi suposición sobre tu situación:
- El navegador del usuario intenta acceder a una función de aplicación restringida
- La aplicación envía el navegador al sitio web de identidad para obtener un artefacto o token de portador que contiene el permiso necesario para usar la función restringida
- El sitio web de identidad comprueba la identidad del usuario, genera un artefacto que indica que los permisos son correctos para la operación, lo firma y lo devuelve al navegador
- El navegador accede a la función restringida, pero esta vez con el token que indica que el usuario tiene los permisos necesarios.
- La aplicación lee el token y realiza la operación.
En este caso, le preocupa que el token de portador, que fluye a través de Internet al navegador del usuario, pueda ser reemplazado por un token de portador obtenido anteriormente, para un usuario diferente que pueda tener más permisos.
Sin embargo, no debes evitar completamente la reproducción. Por ejemplo, si el paso 4 falla debido a un problema de red, el usuario debería poder actualizar la página y volver a intentarlo, y el mismo token se enviará nuevamente. Esto está perfectamente bien.
Lo que sí desea evitar es que el usuario envíe un token / artifact de otro usuario. O si los permisos del usuario fueron revocados hace un día, no desea que el usuario envíe su propio token desde hace dos días.
Todo lo que necesitas para esto es asegurarte
- El artefacto identifica al usuario
- El artefacto identifica el permiso
- El artefacto indica un período durante el cual se concede el permiso al usuario
- El artefacto se firma de una manera que puede validarse
Si hace todo lo anterior, no es necesario bloquear la reproducción. Bueno, técnicamente el artículo # 3 anterior incluye un intervalo de fechas, por lo que es una especie de mitigación de repetición débil. Pero la idea de que cada token debe generarse en el contexto de un desafío aleatorio y una respuesta no es correcta: el servidor de identidad solo tiene que indicar ("afirmar") que un usuario, un permiso y una ventana de tiempo deben estar todos juntos y firmarlo . Si lo hace, evitará el tipo de ataques que creo que le preocupan.
Por favor, corríjame si mis conjeturas son incorrectas.