La API es pública: cualquiera puede borrar héroes y nadie sabe quién consulta. El último paso aplica el tema: autenticación y autorización, tokens opacos, renovación y rotación, Principal y filtro Servlet. Lo externo es el formato del intercambio; el mecanismo que lo cumple lo diseña cada uno.
{
"accessToken": "kR9x..._A2t",
"refreshToken": "bV3q...8fTw"
}
Authorization: Bearer …. El de renovación solo sirve para pedir un par nuevo, que rota: tras la renovación, el par antiguo deja de valer.401 Unauthorized; quien llega sin permiso, 403 Forbidden. Ambos por el canal del manejador global del paso 10.SecureRandom con formato URL de Base64) y el almacén de sesiones activas guarda su hash, nunca el valor en claro: robar el almacén no da por qué vale el token.Principal, estado por petición (ThreadLocal y su limpieza) y el filtro Servlet que se ejecuta antes del controlador.Principal propio y el servicio que lo construyen son tuyos: decide el nombre y lo mínimo que llevan.401 y sin revelar cuál de las dos falló.403, no un error más.401 de siempre: el mensaje dice qué ocurre, no cómo se comprobó.Principal del usuario anterior.El paso 12 completa el recorrido: la app del paso 01 (pseudocódigo del gremio) acaba siendo una API REST autenticada por tokens opacos, con roles, filtro y estado por petición — los mismos héroes y la misma forja, construidos paso a paso por quien los había diseñado al principio del curso.