Salut à tous,

On se pose une question avec un collègue, concernant la sécurisation de nos WebServices.

On voit basiquement 2 approches pour la gestion des habilitations.

La première consiste à sécuriser directement les WebMethod, la seconde à sécuriser les services métiers.

Dans tous les cas, on partirait sur une approche par annotations, en utilisant les annotations @DenyAll, @RolesAllowed, @DeclareRoles, @PermitAll.

Dans le premier cas, que je défends..., chaque WebMethod n'est accessible que par son "public". On expose donc à chaque public que les WebMethod que le concerne, on peut isoler les WebMethod/WS sur différents serveurs au besoin, etc...
Dans le second cas, on a une interface unique. La sécurité/authentification étant gérée au niveau des services métier, on peut brancher dessus tout et n'importe quoi (d'autres WS, d'autres services métiers, etc...) on est serein quand au résultat. Chaque appelant est alors responsable de gérer ce qu'il fait des exceptions qu'il reçoit (interceptors CXF, etc...).

Dans ce cas, le service métier se protège directement.
Dans mon optique, je le considère comme étant dans un sanctuaire où ceux qui l'appellent ne font pas n'importe quoi !

Je suppose que le choix dépend fortement de nos objectifs finaux (est-ce que d'autres services vont appeler ce service métier à protéger ? est-ce qu'il y a un risque fort à exposer un seul et même WS/WebMethod ? ...) Et bien sûr, je suppose que les 2 solutions ne sont pas exclusives, m'enfin est-il vraiment raisonnable/nécessaire de mettre en oeuvre les 2 ?

Bref, quelles sont vos recommandations ? Vos bonnes pratiques ? Quelle est la solution évidente et bien meilleure à laquelle je n'ai pas pensé ?

Par avance, merci pour vos retours/conseils.