J'envisage d'utiliser OAuth2 pour mon application. L'architecture que j'essaie de mettre en œuvre est la suivante:
Jusqu'à présent, j'ai réussi à mettre en œuvre cette interaction entre 3 applications de base (1 serveur d'authentification, 1 serveur de ressources et 1 client). La chose que je ne fais pas fonctionner, c'est la fonctionnalité de déconnexion. J'ai lu le "problème notoirement délicat" que Dave Syer décrit dans son tutoriel, mais dans ce cas, j'ai vraiment besoin que l'utilisateur se reconnecte après la déconnexion. J'ai essayé de donner quelques secondes au jeton d'accès et au jeton d'actualisation, mais au lieu d'être invité à me connecter à nouveau à l'expiration, j'obtiens un NPE sur l'application cliente. J'ai également essayé les solutions proposées dans ce post pour supprimer le jeton du magasin de jetons, mais cela ne fonctionne pas. La signature unique est pour moi le comportement souhaitable pour cette implémentation. Comment puis-je y parvenir en utilisant Spring Boot Oauth2. Si ce n'est pas possible pour une raison quelconque, quelles alternatives pourrais-je utiliser pour implémenter une sécurité centralisée à l'aide de Spring Boot?
Merci d'avance.
Après de nombreux tests, j'ai réalisé que cela peut être résolu simplement avec une redirection vers AuthServer et en faisant la déconnexion par programme comme ceci:
Dans l'application client (WebSecurityConfigurerAdapter):
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.logout()
.logoutSuccessUrl("http://your-auth-server/exit");
}
Sur le serveur d'autorisation:
@Controller
public class LogoutController {
@RequestMapping("/exit")
public void exit(HttpServletRequest request, HttpServletResponse response) {
// token can be revoked here if needed
new SecurityContextLogoutHandler().logout(request, null, null);
try {
//sending back to client app
response.sendRedirect(request.getHeader("referer"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
J'ai posté un exemple d'application sur github avec un exemple complet de cette implémentation.