web-dev-qa-db-fra.com

Gestion de session: comment générer un jeton d'authentification pour REST? (Jersey)

J'essaie d'implémenter la gestion de session dans mon service REST. J'ai appris ces règles en surfant:

  1. Ne pas utiliser de sessions côté serveur - cela viole le principe RESTful.

  2. Utiliser l'authentification HTTP Basic - Pas possible pour le moment, car on me demande de ne pas utiliser SSL/TLS (ce qui est sans aucun doute nécessaire pour l'authentification de base.)

  3. Utilisation de Http Digest - J'ai entendu dire que cela augmentait le trafic réseau. Cela semble coûteux, surtout lorsque mon client est un appareil mobile.

  4. Utilisation de cookies - On me dit que je ne devrais jamais compter sur les cookies pour sécuriser mes ressources importantes, elles peuvent être usurpées facilement. De plus, j'ai lu des informations sur les attaques de scripts intersites via des cookies.

  5. Il me reste une option de génération de jeton d'authentification, que l'utilisateur doit envoyer à chaque fois - ce qui, je l'avoue, n'est pas "entièrement" RESTful.

Maintenant, je dois savoir comment générer ces jetons d'authentification uniques, suffisamment sécurisés au niveau de l'entreprise? Y a-t-il une bibliothèque pour Jersey? Dois-je opter pour OAuth..Je viens de lire un peu à leur sujet, sont-ils utiles dans mon cas? Veuillez garder à l'esprit que mes clients cibles sont des appareils mobiles - peuvent-ils accéder à un service OAuth ??

43
Jaguar

Par souci de simplicité, je génère mon propre jeton d'authentification en utilisant UUID avant de crypter l'intégralité du jeton avec Jasypt : -

String key = UUID.randomUUID().toString().toUpperCase() +
        "|" + someImportantProjectToken +
        "|" + userName +
        "|" + creationDateTime;

StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();

...

// this is the authentication token user will send in order to use the web service
String authenticationToken = jasypt.encrypt(key);

La clé contient le creationDateTime afin que je puisse l'utiliser pour vérifier la durée de vie. De cette façon, si l'utilisateur utilise le même jeton d'authentification après X minutes, cela ne fonctionnera plus et je renverrai un code interdit 403.

38
limc