la sécurité du spring AuthenticationManager vs AuthenticationProvider?

Quelqu’un peut-il me dire la différence entre un AuthenticationManager et un AuthenticationProvider dans Spring Security?

Comment sont-ils utilisés et comment sont-ils appelés. Je crois savoir qu’un SecurityFilter appelle le AuthenticationManager pour authentifier un object d’ Authentication ? Mais alors, où AuthenticationProvider entre-t-il en jeu?

Merci!

Je pense que AuthenticationManager délègue la récupération des informations utilisateur persistantes à un ou plusieurs AuthenticationProvider . Les fournisseurs d’authentification ( DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider par exemple) sont spécialisés dans l’access à des référentiels d’informations utilisateur spécifiques. Quelque chose d’autre est mentionné dans cette partie du manuel de référence. Ça dit:

Vous souhaiterez peut-être enregistrer des beans AuthenticationProvider supplémentaires avec le ProviderManager et vous pouvez le faire en utilisant l’élément avec l’atsortingbut ref, où la valeur de l’atsortingbut est le nom du bean fournisseur que vous souhaitez append.

En d’autres termes, vous pouvez spécifier plusieurs AuthenticationProviders, par exemple, un qui recherche des utilisateurs dans une firebase database LDAP et un autre qui recherche dans une firebase database SQL.

De référence de spring

AuthenticationManager est juste une interface, donc l’implémentation peut être tout ce que nous choisissons

L’implémentation par défaut de Spring Security s’appelle ProviderManager et, plutôt que de gérer elle-même la demande d’authentification, elle délègue à une liste d’AuthenticationProvider configurée, chacune étant interrogée à tour de rôle pour voir si elle peut effectuer l’authentification. Chaque fournisseur lancera une exception ou renverra un object d’authentification entièrement rempli.

En outre, si vous vérifiez le code source pour AuthenticationManager, ProviderManager et AuthenticationProvider, vous pouvez le voir clairement.

ProviderManager implémente l’interface AuthenticationManager et dispose d’une liste de fournisseurs d’authentification. Donc, si vous voulez avoir un mécanisme d’authentification personnalisé, vous devrez implémenter le nouveau AuthenticationProvider.