2011-08-02 9 views
2

Je dois mettre en œuvre un schéma de sécurité personnalisé en utilisant Spring Security 3.0.5.Spring Security 3 authentification personnalisée par REMOTE_USER

L'utilisateur doit être authentifié automatiquement (sans formulaire de connexion) par le champ REMOTE_USER dans la requête. Il semble que je dois mettre en œuvre personnalisé AbstractAuthenticationProcessingFilter et AuthenticationManager.

Suis-je dans la bonne direction? Quelle pourrait être la configuration XML?

Répondre

3

Vous souhaitez accepter les affirmations d'identité faites par un autre agent? C'est suffisant; il y a des scénarios où cela a du sens. Cependant, vous devez vérifier ces assertions; Il y a plusieurs façons de le faire, en voici quelques unes:

  • Si vous partagez une base de données avec l'entité asserting, vous pouvez vérifier les nombres magiques.
  • Vous pouvez utiliser des signatures cryptographiques
  • Vous pouvez vérifier que le message provient d'un hôte qui est autorisé à faire de telles affirmations - qui devrait être à l'intérieur d'un réseau que vous contrôlez et où vous contrôlez le chemin entre aussi, qui est assez facile à faire mais un facteur de déploiement critique que vous devez documenter.

La méthode la plus simple est probablement d'écrire votre propre AuthenticationProvider, dont le travail est d'examiner les lettres de créance présentées (le domaine REMOTE_USER et qui affirme dans votre cas) et décider de construire un objet Authentication. Sinon, il devrait lancer une exception. Vous enregistrez votre fournisseur de auth (en supposant qu'il est un haricot appelé myAuthProvider) comme ceci:

<security:authentication-manager> 
    <security:authentication-provider ref="myAuthProvider" /> 
</security:authentication-manager> 

Comme je l'ai dit, vous aurez besoin d'avoir un fournisseur auth. Si le nom d'utilisateur est fourni par un en-tête HTTP et vous allez juste faire confiance, vous êtes en fait dans ce qu'on appelle un cas pré-authentifié (à savoir, il y a quelque chose d'autre qui fait l'étape d'authentification pour vous). La documentation Spring Security a un whole chapter on this en utilisant Siteminder comme exemple: il suffit de changer le nom de l'en-tête et cela devrait fonctionner. (Eh bien, vous aurez également besoin d'un service de données d'utilisateur, de sorte que vous pouvez mapper de l'utilisateur authentifié à l'ensemble des autorités qu'elles sont accordées, mais c'est un tout « histoire utre.) Vous

+0

Merci beaucoup, semble que ce scénario de pré-authentification est exactement ce que je dois faire. Je vais essayer! – never

+0

@never: Heureux d'être utile. Mais faites attention: il est si facile de se tromper de sécurité et de laisser les choses ouvertes par accident (en parlant d'expérience!). Vous devez le tester une fois déployé et le tester avec des clients non authentifiés. –

Questions connexes