Spring Security Token d'Authentification Reposant JSON Service
Je suis à la recherche pour l'utilisation de Ressort de Sécurité pour un Spring MVC de l'application qui va être strictement un JSON web service. J'ai fait quelques recherches et de lire quelques articles mais je n'ai pas vraiment trouvé quelque chose de complet. Je veux que la demande soit complètement apatrides et à l'utilisation de jeton d'authentification. Je ne veux pas le Spring MVC de l'application de toute les formes, ou les formulaires utilisés pour s'authentifier. Il faut absolument tenir demandes et des données en JSON, et retour JSON réponses.
Il y aura une Angular JS application client qui devra envoyer le nom d'utilisateur et le mot de passe et récupérer le jeton de l'application pour être utilisé dans séquentielle demandes. À un certain point, il peut y avoir Android clients qui accèdent à ce service web en tant que bien.
Je suis en supposant que le Printemps de Sécurité a sa façon interne à la cartographie d'un jeton de session d'un utilisateur, le sens qu'il sait jeton XXXXXXXXXXXX est admin d'utilisateur Bob et un jeton AAAAAAAAAA est la norme de l'utilisateur Joe. Toutefois, je n'ai pas beaucoup d'expérience avec le Printemps de Sécurité, donc je ne sais pas comment tout cela se rassemble. Je veux toujours être en mesure d'utiliser sécurisé annotations sur le contrôleur et les méthodes de service.
Est-il un moyen pour accomplir cette au Printemps de Sécurité?
Cette question semble être un bon endroit pour commencer, mais je ne suis pas sûr que cela fonctionne comme je l'ai imaginé Réparateur d'Authentification via le Printemps.
- cochez cette url, il peut être utile github.com/srinivas1918/spring-rest-security. en outre, vous devez ajouter un formulaire d'identification également à la configuration.
Vous devez vous connecter pour publier un commentaire.
Ce sera un bon endroit pour commencer avec Printemps-Repos-Réutilisable.
puis connectez-vous (envoyer le nom d'utilisateur/mot de passe) et ce seront de retour le jeton.
l'authentification basée sur une clé cryptographique.
Vous devez venir avec un jeton format et le cryptage de même. Idéalement, vous devez garder une date d'expiration pour le jeton de trop, la date d'expiration, le long de avec le nom d'utilisateur peut être une partie du jeton.Utiliser
un algorithme de chiffrementune fonction de hachage cryptographique comme MD5 et obtenir de hachage de l'ensemble du Jeton.Modifier : Comme l'a souligné Maciej Stępyra MD5 semble être brisé et son conseillé d'utiliser une plus Forte fonctions de hachage comme SHA-256.
Printemps de sécurité par défaut va vous rediriger vers une page de connexion, mais cela ne fait pas de sens dans le cas de mains afin de l'utiliser un
AuthenticationEntryPoint
dans la configuration(Réf échantillon github le code).J'ai été en utilisant ce format pour mon Jeton:
token:username:hash:expiry
hash=MD5(nom d'utilisateur+magickey)
expiration=current_timestamp+mins_to_expiry
NB:Merci dhavaln pour le code. J'ai utilisé cela comme une référence et a développé chose de similaire.
create-session="stateless "
. Dans votreTokenAuthenticationFilter
rechercher userdetails et de créer unUsernamePasswordAuthenticationToken
et l'utilisationSecurityContextHolder.getContext().setAuthentication(authentication);
"Je veux que la demande soit complètement apatrides"
J'avais reconsidérer ce que vous essayez de faire. Il ya une raison pourquoi vous ne pouvez pas trouver de bons exemples de votre solution: Vous ne pouvez pas avoir une application qui est à la fois apatrides et sécurisé. Aussi, si vous stockez les jetons quelque part, vous n'êtes pas apatrides. Même si vous n'êtes pas ranger les jetons (comme l'utilisation de JWT pour les coder), vous devez vous protéger contre les attaques CSRF si les utilisateurs accèdent à ce dans un navigateur web. Si vous ne passez votre route, attendez-vous à écrire beaucoup de code de sécurité personnalisé (ce qui est une mauvaise chose). Voir les discussions à ce sujet ici: https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii
Dans mon cas je l'ai trouvé plus facile de remplacer la
org.springframework.security.web.context.SecurityContextRepository
dansorg.springframework.security.web.context.SecurityContextPersistenceFilter
avec une mise en œuvre qui partage le SecurityContext parmi plusieurs tomcat nœuds. Le client conserve l'envoi d'un jeton jsessionid mais je peux faire un simple aller-robin équilibrage de la charge et de ne pas avoir à vous soucier de la réplication de session.