C'est le 17e jour du Java EE Advent Calendar 2016.
Jersey, l'implémentation de référence de JAX-RS, possède une extension qui prend en charge les clients OAuth 2. Cette fois, j'ai fait un échantillon en l'utilisant. Au fait, j'ai créé le serveur d'authentification avec Spring.
Un exemple de code est disponible sur GitHub.
L'application elle-même est aussi simple que d'afficher "Hello,
Essayez d'abord d'ouvrir http: // localhost: 8080 / helloworld.
Ensuite, vous serez redirigé vers le serveur d'authentification et invité à vous connecter.
Une fois connecté, il vous sera demandé si vous souhaitez autoriser l'application helloworld à récupérer les informations utilisateur.
Après avoir donné votre autorisation, vous serez renvoyé à l'application helloworld avec un message d'accueil.
Si le jeton d'accès n'est pas stocké dans la session, l'application helloworld déterminera qu'il n'est pas autorisé et utilisera la méthode start
de ʻOAuth2CodeGrantFlow` pour obtenir le code d'autorisation pour obtenir le jeton d'accès. Construire un URI de redirection](https://github.com/backpaper0/javaeeac2016/blob/qiita/helloworld/src/main/java/com/example/UaaFilter.java#L74-L80).
OAuth2CodeGrantFlow flow = OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(
clientIdentifier, authorizationUri, accessTokenUri)
.redirectUri(redirectUri)
.client(client)
.property(Phase.ALL, OAuth2Parameters.STATE, state.getValue())
.build();
URI location = URI.create(flow.start());
Après autorisation, vous serez redirigé vers l'URI défini dans la méthode redirectUri
ci-dessus, mais à ce moment, le code d'autorisation sera joint en tant que paramètre de requête avec le nom code
.
Après avoir analysé l'URI de la requête pour obtenir le code
, [passez-le à la méthode finish
de ʻOAuth2CodeGrantFlow` pour obtenir le jeton d'accès](https://github.com/backpaper0/javaeeac2016/blob/qiita/helloworld /src/main/java/com/example/UaaFilter.java#L61-L68).
OAuth2CodeGrantFlow flow = OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(
clientIdentifier, authorizationUri, accessTokenUri)
.redirectUri(redirectUri)
.client(client)
.property(Phase.ALL, OAuth2Parameters.STATE, state.getValue())
.build();
String state = queryParameters.getFirst("state");
TokenResult tokenResult = flow.finish(code, state);
Lors de la récupération des informations utilisateur, le jeton d'accès est intégré dans l'en-tête ʻAuthorization, mais c'est la [méthode ʻOAuth2ClientSupport`` feature
] qui crée une Feature
qui le fait pour vous (https: // github.com/backpaper0/javaeeac2016/blob/qiita/helloworld/src/main/java/com/example/OAuth2ClientFactory.java#L30).
Enregistrez cette «fonctionnalité» dans «Client».
public Client client() {
return ClientBuilder.newBuilder()
.register(HttpAuthenticationFeature.basic(clientId, clientSecret))
.register(OAuth2ClientSupport.feature(accessToken.getValue()))
.build();
}
En utilisant ʻoauth2-client de Jersey, j'ai pu créer une application client en utilisant OAuth 2. Cependant, comme vous pouvez le voir à partir de l'exemple de code, j'ai dû le faire à sa manière (bien que mon ʻoauth2-client
puisse manquer de compétence).
De plus, j'ai essayé de le faire fonctionner pour le moment, donc je pense qu'il y a plus de choses à considérer lors de sa mise en œuvre.
De cette façon, j'aurais aimé pouvoir le faire facilement, mais j'étais satisfait car je pouvais faire un échantillon émouvant.
Ci-dessus ⛄️
Recommended Posts