JWTs o Cookies de sesion El Dilema de la Autenticación en Entornos Web

JWT o Cookies de Sessió: El Dilema de l’Autenticació en Entorns Web

Una de les parts més importants de qualsevol aplicació o sistema web sovint és l’autenticació.

L’Autenticació i l’Autorització

autenticación y autorización

L’autenticació és el procés pel qual un sistema verifica la identitat d’un usuari o dispositiu. A més de l’autenticació, hi ha el procés d’autorització. El procés d’autorització valida si aquest usuari o dispositiu té permisos per accedir a un recurs específic.

Quan treballem en el sistema d’autenticació, el principal problema amb què hem de lluitar és que HTTP no té estat. Cada sol·licitud és independent i no conté cap context sobre les sol·licituds anteriors. Aleshores, com gestionem les sol·licituds que es realitzen després de superar l’autorització?

Cookies de Sessió i JWT: Dues Opcions d’Autenticació

Aquí és on entren en joc les Cookies de Sessió i JWT (Json Web Token). Per a un sistema web i una experiència d’usuari òptimes, haurem de triar com gestionar els usuaris autenticats. I tenir en compte els pros i contres de triar una opció o una altra.

Autenticació basada en Cookies de Sessió

L’autenticació basada en cookies de sessió es du a terme quan l’usuari introdueix les seves credencials i el servidor genera un registre persistent que representa aquesta sessió de navegació.

Aquest registre sol incloure un identificador primari, un per a l’usuari. També inclou la data i l’hora d’inici de sessió, l’adreça IP i l’UserAgent del client. Aquesta informació es guarda a la base de dades. L’identificador de la sessió es envia de tornada a la resposta de la sol·licitud HTTP. Així, s’emmagatzema com a cookie al navegador de l’usuari. A partir d’aquí, cada sol·licitud inclourà l’identificador de sessió. Això permet al servidor verificar-ne la validesa i decidir sobre les dades o informació que ha de tornar.

Avantatges i Desavantatges de l’autenticació basada en Cookies de Sessió

És important conèixer els avantatges i desavantatges de l’autenticació basada en cookies per prendre la decisió adequada segons les nostres necessitats.

ventajas y desventajas2

Comencem pels avantatges:

  • Simplicitat: Les Cookies de Sessió són fàcils d’implementar i usar, la qual cosa les fa adequades per a aplicacions amb una estructura simple.
  • Persistència de la sessió: Les Cookies permeten als usuaris mantenir oberta la seva sessió fins i tot després de tancar el navegador, cosa que proporciona comoditat i millora l’experiència de l’usuari.
  • Escalabilitat: Per a aplicacions amb alta concorrència, l’ús de Cookies de Sessió pot alleujar la càrrega del servidor en emmagatzemar informació d’autenticació al client, permetent gestionar un major nombre d’usuaris.
  • Control de sessions: Les Cookies permeten als administradors de sistemes revocar o manipular sessions d’usuaris de manera més senzilla, la qual cosa millora la seguretat.

No obstant això, l’autenticació basada en Cookies també té els seus inconvenients a considerar abans de prendre decisions.

  • Risc de seguretat: Les Cookies de Sessió poden ser vulnerables a atacs de suplantació d’identitat si no es gestionen correctament. Un robatori de Cookies podria permetre l’accés no autoritzat a l’ compte de l’usuari.
  • Problemes de privadesa: Les Cookies poden emmagatzemar informació personal de l’usuari, cosa que planteja preocupacions de privadesa si s’utilitzen de manera inadequada o emmagatzemen dades confidencials.
  • Compatibilitat del navegador: Les Cookies poden funcionar de manera inconsistent en diferents navegadors, cosa que pot portar a problemes d’usabilitat.
  • Complexitat de l’administració de sessions: L’administració de sessions amb Cookies pot ser més complexa a mesura que creix la mida de l’aplicació, la qual cosa requereix una planificació i organització addicionals.

Autenticació basada en JWT (Json Web Token)

Una altra opció que tenim a l’hora de realitzar i mantenir l’autenticació als nostres entorns web és utilitzar JWT, o el que és el mateix, Json Web Token

Aquest flux també comença quan l’usuari proporciona algun tipus de credencials i el servidor les utilitza per autenticar aquesta sol·licitud. No obstant això, la gran diferència respecte a l’autenticació basada en Cookies (on emmagatzemem l’estat de la sessió i el busquem o recuperem a cada sol·licitud) és que amb JWT tot aquest context és autònom en la cadena que s’envia de tornada al client i es pot recuperar informació de la mateixa sense necessitat de consultar la base de dades, simplement la informació que necessitem està en el Token, i si tenim permisos podrem llegir-la.

Dit d’una altra manera, els JWT són objectes JSON que segueixen un estàndard i que es generen i signen en el procés d’autenticació, garantint que es pugui confiar en ells.

Components d’un JWT

Si analitzem un JWT, podrem veure que consta de tres parts: l’encapçalament, la càrrega útil i la signatura. Quan els servidors reben els JWT, poden verificar que no han estat manipulats, ja que la signatura del JWT conté l’encapçalament original i les dades de la càrrega útil.

La part de la càrrega conté tres elements relacionats amb l’usuari, els permisos i l’expiració. L’usuari és la identitat per a la qual es va emetre el JWT. Els permisos són els associats al mateix. L’expiració és el temps de vigència del token.

La informació sobre l’algorisme utilitzat per signar o xifrar el token està a l’encapçalament. Tant l’encapçalament com la càrrega útil es codifiquen en base64. La part de la signatura es crea d’aquesta manera. Es combina l’encapçalament i la càrrega útil. Després, s’aplica un hash a aquesta combinació amb una clau secreta. Això permet detectar si algú ha manipulat les notificacions després de signar el JWT.

En els sistemes distribuïts aquesta operació es realitza amb una signatura asimètrica. El servidor que emet el JWT usa una clau privada per xifrar el contingut. Després, l’audiència pot utilitzar la clau pública corresponent per verificar que la càrrega útil actual és la mateixa que va signar l’emissor.

Avantatges i desavantatges de l’autenticació basada en JWT

ventajas y desventajas

A continuació, detallarem alguns avantatges i desavantatges sobre l’ús de JWT:

Comencem pels avantatges:

  • Seguretat: Els tokens JWT poden oferir un nivell sòlid de seguretat, ja que estan signats digitalment i es poden xifrar, protegint la integritat de la informació d’autenticació.
  • Independència de l’estat: Els tokens JWT són independents de l’estat del servidor, la qual cosa significa que no requereixen que el servidor mantingui informació sobre les sessions d’usuari. Això facilita l’escalabilitat.
  • Portabilitat: Els tokens JWT es poden utilitzar en diferents sistemes i serveis, la qual cosa els fa ideals per a aplicacions distribuïdes i microserveis.
  • Informació personalitzada: Podeu incloure dades personalitzades en el token JWT, la qual cosa permet una fàcil personalització de les sessions i rols d’usuari.
  • Rendiment: En eliminar la necessitat d’emmagatzemar informació de sessió al servidor, els tokens JWT poden millorar el rendiment de l’aplicació, ja que redueixen la càrrega al servidor.

D’altra banda, també és recomanable conèixer les desavantatges o contres de l’autenticació basada en Tokens:

  • Impossible revocació: Un cop emès, un token JWT és vàlid fins que expiri. No es poden revocar de manera eficient, la qual cosa pot ser un problema en cas que un token sigui robat o compromès.
  • Complexitat: La implementació de JWT pot ser més complexa en comparació amb les Cookies, especialment en aplicacions de gran escala. Requereix una gestió més detallada de tokens i claus.
  • Privadesa: Ja que els tokens JWT contenen informació sobre l’usuari, hi ha un risc potencial per a la privadesa si els tokens cauen en mans equivocades.

Consideracions finals i Seguretat

Com es pot apreciar, cada mètode té els seus pros i els seus contres. Per això, és molt important conèixer els requeriments del sistema a desenvolupar. Així, podrem decidir-nos per una opció o una altra, o per una combinació de totes dues si el sistema ho requereix. Entenem que cada aplicació és única i que cal avaluar la compensació entre seguretat i latència.

Ambdós mètodes són 100% segurs?

Ambdós mètodes d’autenticació es poden considerar segurs, sempre i quan el nostre sistema en conjunt ho sigui. No tot depèn només de l’autenticació. Hem de cuidar la generació i l’emmagatzematge dels JWT (si usem aquesta opció). Sobretot, hem de tenir cura d’on els emmagatzemem.

És habitual emmagatzemar els JWT al LocalStorage del navegador. En aquest cas, la millor opció seria guardar-los en una Cookie amb l’opció de HttpOnly. Així evitem que el Token estigui accessible per a l’usuari o intrús. En l’autenticació amb Cookies, també és important usar l’opció de HttpOnly. A més, hem de tenir cura dels nostres mètodes d’API i l’ús de verbs HTTP.

Afegir també que és molt important revisar el nostre lloc web per prevenir atacs de tipus Cross-Site Request Forgery (CSRF).

Conclusions

La elecció entre Cookies de Sessió i JWT per a l’autenticació en entorns web no és trivial. Cadascun té els seus avantatges i desavantatges, i la elecció ha de basar-se en els requisits específics de la teva aplicació.

És important considerar factors com la simplicitat, la seguretat, l’escalabilitat i la privadesa en prendre una decisió. En alguns casos, una combinació de tots dos mètodes pot ser la solució òptima.

En última instància, la seguretat del teu sistema depèn de com implementis i administris l’autenticació, independentment de l’opció que triïs. L’equilibri entre seguretat i latència és essencial per oferir la millor experiència als teus usuaris i protegir les seves dades.

Gràcies per prendre’t el temps de llegir sobre el dilema de l’autenticació en entorns web. Esperem que aquesta informació t’ajudi a prendre decisions informades i a dissenyar sistemes web segurs i eficients. Si tens preguntes, necessites assessorament o vols discutir com podem col·laborar, no dubtis a posar-te en contacte amb nosaltres.

Agustín Plaza Alcántara – Lead Developer at Itequia