Gérer les exceptions à la Sécurité, au Printemps de Démarrage Serveur de Ressources
Comment puis-je obtenir mon custom ResponseEntityExceptionHandler
ou OAuth2ExceptionRenderer
pour gérer les Exceptions soulevées par le Printemps de sécurité à l'état pur, serveur de ressources?
Nous avons mis en place un
@ControllerAdvice
@RestController
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
donc, chaque fois qu'il y a une erreur sur le serveur de ressources que nous voulons répondre avec
{
"message": "...",
"type": "...",
"status": 400
}
Le serveur de ressources utilise l'application.propriétés de réglage:
security.oauth2.resource.userInfoUri: http://localhost:9999/auth/user
pour authentifier et autoriser une demande à l'encontre de notre auth server.
Toutefois, le printemps de sécurité de l'erreur sera toujours contourner notre gestionnaire d'exception à
@ExceptionHandler(InvalidTokenException.class)
public ResponseEntity<Map<String, Object>> handleInvalidTokenException(InvalidTokenException e) {
return createErrorResponseAndLog(e, 401);
}
et produire des
{
"timestamp": "2016-12-14T10:40:34.122Z",
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/api/templates/585004226f793042a094d3a9/schema"
}
ou
{
"error": "invalid_token",
"error_description": "5d7e4ab5-4a88-4571-b4a4-042bce0a076b"
}
Alors, comment puis-je configurer la sécurité de la manipulation d'exception pour un serveur de ressource? Tout ce que je trouve des exemples sur la façon de personnaliser l'Authentification du Serveur par la mise en œuvre d'une coutume OAuth2ExceptionRenderer
. Mais je ne peux pas trouver où la relier au serveur de ressources de la sécurité de la chaîne.
Notre seule de configuration/est-ce:
@SpringBootApplication
@Configuration
@ComponentScan(basePackages = {"our.packages"})
@EnableAutoConfiguration
@EnableResourceServer
OriginalL'auteur Pete | 2016-12-14
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans les précédents commentaires, la demande est rejetée par le cadre de sécurité avant qu'il n'atteigne la couche MVC donc
@ControllerAdvice
n'est pas une option ici.Il y a 3 interfaces dans le Ressort du cadre de la Sécurité qui peuvent être d'intérêt ici:
Vous pouvez créer des implémentations de chacune de ces Interfaces dans le but de personnaliser la réponse envoyée pour divers événements: connexion réussie, échec de la connexion, de la tentative d'accès à une ressource protégée avec des autorisations insuffisantes.
La suivante serait de retourner une réponse JSON sur l'échec de tentative de connexion:
Vous devez également enregistrer votre œuvre(s) avec le cadre de la Sécurité. En Java config il se présente comme ci-dessous:
@EnableResourceServer
j'ai un@Configuration
classe où j'fil danshttp.exceptionHandling().accessDeniedHandler(restAccessDeniedHandler
, mais cela ne veut pas attraper le suivant:{ "error": "invalid_token", "error_description": "5d7e4ab5-4a88-4571-b4a4-042bce0a076b" }
Comment le feriez-vous?Dans cette réponse, le
AuthenticationFailureHandler
est câblé en se basant sur uneloginProcessingUrl
. Je ne pense pas que vous auriez un de ces pour un@EnableResourceServer
. Sinon, comment pouvez-vous fil?J'ai le même problème que vous . Pouvez-vous trouver la solution finale ? @p
Je suis confronté au problème. @peterl avez-vous trouvé la solution?
OriginalL'auteur Alan Hay
Dans le cas où si vous êtes en utilisant
@EnableResourceServer
, vous pouvez également trouver commode pour prolongerResourceServerConfigurerAdapter
au lieu deWebSecurityConfigurerAdapter
dans votre@Configuration
classe. En faisant cela, vous pouvez simplement vous inscrire personnaliséAuthenticationEntryPoint
en substituantconfigure(ResourceServerSecurityConfigurer resources)
et à l'aide deresources.authenticationEntryPoint(customAuthEntryPoint())
à l'intérieur de la méthode.Quelque chose comme ceci:
Il y a aussi une belle
OAuth2AuthenticationEntryPoint
, qui peut être étendu (puisqu'il n'est pas définitive) et partiellement ré-utilisé lors de la mise en œuvre d'une coutumeAuthenticationEntryPoint
. En particulier, il ajoute "WWW-Authenticate" des en-têtes liées à des erreurs de détails.OriginalL'auteur Vladimir Salin
Vous n'êtes pas en mesure de faire usage de Spring MVC gestionnaire d'Exception des annotations telles que
@ControllerAdvice
parce que le printemps des filtres de sécurité des coups de pied dans beaucoup avant de Spring MVC.OriginalL'auteur so-random-dude
OAuth2ExceptionRenderer est pour un Serveur d'Autorisation. La bonne réponse est susceptible de le manipuler comme détaillé dans ce post (c'est ignorer que c'est oauth et la traiter comme n'importe quel autre ressort de sécurité du mécanisme d'authentification): https://stackoverflow.com/a/26502321/5639571
Bien sûr, cela va attraper oauth exceptions (qui sont jetés avant de vous atteindre votre ressource de point de terminaison), mais toutes les exceptions qui se passe dans votre ressource de point de terminaison aura toujours besoin d'un @ExceptionHandler méthode.
OriginalL'auteur Nikolai Luthman
Printemps 3.0-Delà,Vous pouvez utiliser
@ControllerAdvice
(Au Niveau de la Classe) et s'étendorg.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
classe deCustomGlobalExceptionHandler
OriginalL'auteur Rupesh Patil