Comment utiliser OAuth2RestTemplate?
J'essaie de comprendre comment utiliser un OAuth2RestTemplate objet à consommer ma OAuth2 sécurisé service REST (qui est en cours d'exécution en vertu d'un projet différent et supposons également sur un autre serveur, etc...)
f.e. mon repos de service est:
http://localhost:8082/app/helloworld
-> Accès à cette URL génère une erreur car je ne suis pas authentifié
Pour demander un jeton je voudrais aller à:
http://localhost:8082/app/oauth/token?grant_type=password&client_id=restapp&client_secret=restapp&username=**USERNAME**&password=**PASSWORD**
Après avoir reçu le jeton je peut alors se connecter à l'API REST en utilisant l'URL suivante (exemple jeton inséré)
http://localhost:8082/app/helloworld/?access_token=**4855f557-c6ee-43b7-8617-c24591965206**
Maintenant, ma question est comment puis-je mettre en place une seconde application qui peut consommer cette OAuth2 sécurisé API REST? Vraiment, je n'ai pas trouvé d'exemples de travail où vous fournir le nom d'utilisateur et le mot de passe (par exemple en provenance d'un formulaire de login) et un jeton est généré qui peut être ré-utilisé pour obtenir des données de l'API REST.
Je suis actuellement a essayé quelque chose avec les objets suivants:
BaseOAuth2ProtectedResourceDetails baseOAuth2ProtectedResourceDetails = new BaseOAuth2ProtectedResourceDetails();
baseOAuth2ProtectedResourceDetails.setClientId("restapp");
baseOAuth2ProtectedResourceDetails.setClientSecret("restapp");
baseOAuth2ProtectedResourceDetails.setGrantType("password");
//how to set user name and password ???
DefaultAccessTokenRequest accessTokenRequest = new DefaultAccessTokenRequest();
OAuth2ClientContext oAuth2ClientContext = new DefaultOAuth2ClientContext(accessTokenRequest());
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(baseOAuth2ProtectedResourceDetails,oAuth2ClientContext);
Mais ce n'est tout simplement pas de travail 🙁
Toutes les idées sont grandement appréciés ou des liens vers des exemples et des tutoriels est grandement apprécié.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez trouver exampels pour écrire des clients Oauth ici https://github.com/spring-projects/spring-security-oauth
Dans votre cas, vous ne pouvez pas utiliser les paramètres par défaut ou les classes de base pour tout, vous avez plusieurs classes de la mise en Œuvre de OAuth2ProtectedResourceDetails. La configuration dépend de la façon dont vous avez configuré votre service Oauth, mais en supposant à partir de votre curl liens que je conseille:
Ne pas oublier @EnableOAuth2Client sur votre config de classe, aussi je suggère d'essayer que l'url que vous utilisez sont de travail avec curl abord, essayez aussi de la trace avec le débogueur, car beaucoup d'exceptions sont tout simplement consommé et ne jamais imprimé en raison des raisons de sécurité, de sorte qu'il devient un peu difficile à trouver où est la question. Vous devriez utiliser l'enregistreur de débogage activé ensemble.
Bonne chance
J'ai téléchargé l'échantillon springboot application sur github https://github.com/mariubog/oauth-client-sample
pour décrire votre situation, parce que je ne pouvais pas trouver tous les échantillons pour votre scénario .
http://localhost:8005/authorized-results
c'est de me rediriger vers la page de connexion je suis en mettant le nom d'utilisateur que roy et le mot de passe du printemps, il montre l'erreurbad credentials
vous s'il vous plaît dites-moi ce nom d'utilisateur et le mot de passe dois-je utiliser ?clientOnly
authentification et ces changements ne sont pas inclus dans oryginal Roys oauth exemple , que dans ma fourchette. Si vous suivez lisez-moi auprès de mon client exemple que des points à ma fourche de la oauth exemple de serveur tout devrait fonctionner parfaitement. Pour résumer, vous devez avoir ouath serveur de premier projet a débuté avant de commencer à utiliser oauth modèle .J'ai autre approche si vous voulez jeton d'accès et de faire appel à d'autres ressources système avec jeton d'accès dans l'en-tête
Printemps de Sécurité est livré avec automatique de sécurité: oauth2 accès des propriétés de l'application.fichier yml pour chaque demande et chaque demande a SESSIONID qui il lit et tirer les infos de l'utilisateur via Principale, de sorte que vous devez assurez-vous injecter du Capital dans OAuthUser et obtenir accessToken et de faire appel à des ressources serveur
C'est votre application.yml, changer en fonction de votre auth server:
Dans la réponse de @mariubog (https://stackoverflow.com/a/27882337/1279002) j'ai été en utilisant le mot de passe types de subventions, comme dans l'exemple, mais nécessaire pour définir l'authentification du client système de formulaire. Les étendues n'ont pas été pris en charge par le point de terminaison de mot de passe et il n'était pas nécessaire de définir le type de subvention que le ResourceOwnerPasswordResourceDetails objet définit lui-même dans le constructeur.
...
...
L'essentiel pour moi était le client_id et client_secret n'ont pas été ajoutés à la forme de l'objet à afficher dans le corps si
resource.setClientAuthenticationScheme(AuthenticationScheme.form);
n'a pas été définie.Voir l'interrupteur:
org.springframework.security.oauth2.client.token.auth.DefaultClientAuthenticationHandler.authenticateTokenRequest()
Enfin, lors de la connexion à Salesforce point de terminaison du mot de passe jeton nécessaire pour être annexé à la mot de passe.
Ma solution simple. À mon humble avis c'est le plus propre.
D'abord créer un application.yml
Créer la classe principale: Principal
Puis Créer la classe de contrôleur: Contrôleur
Les dépendances Maven