43 votes

Gestion des sessions : Comment générer un jeton d'authentification pour un service REST ? (Jersey)

J'essaie de mettre en œuvre la gestion des sessions dans mon service REST. J'ai pris connaissance de ces directives en surfant sur :

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

  2. Utilisation de l'authentification HTTP de base - Impossible pour le moment, car on me demande de ne pas utiliser SSL/TLS (qui est sans 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 des cookies - On me dit que je ne devrais jamais me fier aux cookies pour sécuriser mes ressources importantes, car ils peuvent être facilement usurpés. De plus, j'ai lu des articles sur les attaques de scripting intersites par le biais des cookies.

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

J'ai maintenant besoin de savoir comment générer ces jetons d'authentification uniques, qui sont suffisamment sûrs au niveau de l'entreprise ? Existe-t-il une bibliothèque pour Jersey ? Devrais-je opter pour OAuth ? J'ai lu quelques articles à leur sujet, sont-ils utiles dans mon cas ? N'oubliez pas que mes clients cibles sont des appareils mobiles - peuvent-ils accéder à un service OAuth ?

38voto

limc Points 14557

Par souci de simplicité, je génère mon propre jeton d'authentification en utilisant UUID avant de crypter l'ensemble 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 le temps de vie. De cette façon, si l'utilisateur utilise le même jeton d'authentification après X minutes, il ne fonctionnera plus, et je renverrai un code 403 interdit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X