Pour mon application JSF/TomEE, j'ai une base de données NoSQL avec des utilisateurs et des rôles qui spécifie comment les utilisateurs peuvent accéder aux ressources (essentiellement les ID dans un paramètre url) en lecture seule ou en écriture.Shiro et client certs
Je veux mettre en œuvre la sécurité et this post gave me some ideas mais je tiens à essayer une bibliothèque tierce - probablement Shiro ou PicketLink. La règle est que les utilisateurs s'authentifieront avec un certificat client, et si ce n'est pas le cas, ils seront authentifiés en tant qu'utilisateur invité par défaut. Étonnamment, j'ai un peu de mal à trouver des informations sur la façon de faire cela dans Shiro, ça ne semble pas simple. Je suis quelque peu surpris qu'il n'y ait rien de «prêt à l'emploi» dans Shiro pour implémenter l'authentification par certificat client.
Donc je pense que je dois créer un royaume pour "connecter" Shiro avec ma base de données. Ensuite, j'ai lu que je pourrais avoir besoin d'étendre org.apache.shiro.authc.UsernamePasswordToken
pour lire le certificat et le transmettre à Shiro. Ensuite, je suppose que je dois restreindre l'accès au contenu dans les pages xhtml JSF (en utilisant l'attribut rendered
par exemple) et je suppose que même dans toutes les méthodes des beans gérés Named
, je devrai vérifier les permissions.
Aussi, je ne vois pas comment je peux assigner l'utilisateur invité quand un certificat n'est pas fourni, puisque apparemment c'est TomEE qui valide le client, donc si aucun certificat n'est fourni, mon code ne sera pas exécuté pour affecter l'utilisateur invité. Je pourrais ouvrir deux ports différents dans TomEE, mais alors l'accès ne sera pas unifié, puisque je veux traiter l'utilisateur invité uniformément, comme n'importe quel autre utilisateur dans le système. Comment cela peut-il être fait?
Est-ce implémenté plus facilement dans PicketLink? (qui est également mieux préparé pour JSF)