-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Visioplainte : Permettre la connexion à l'api de créneaux en lecture seule #4834
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 bien joué ! Je n’ai pas testé mais j’ai relu le code attentivement et les specs me font me sentir en masécurité .
J’ai mis une suggestion de signature alternative mais ce n’est vraiment pas indispensable.
Est-ce qu’on rajoute cette nouvelle clé API aux variables d’env du .env.sample
?
Je suis heureux de voir sur https://www.masecurite.interieur.gouv.fr/fr une jolie carte DSFR qui évoque la maltraitance animale. Je vais derechef leur signaler le McDo d’en bas de chez moi.
|
||
protected | ||
|
||
def allow_authentication_with_read_only_api_key |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ça me va tout à fait comme ça même si c’est un peu surprenant comme méthode. On pourrait éventuellement rajouter un petit commentaire ici indiquant que cette méthode a vocation à être utilisée en prepend_before_action
?
Et je fais une proposition de signature alternative peut-être un peu plus traditionnelle mais ce n’est absolument pas nécessaire de changer, c’est au cas où ça t’inspire.
Il pourrait y avoir deux méthodes authenticate_with_api_key_with_full_access
et authenticate_with_api_key_with_read_access
.
La deuxième permettrait l’accès avec l’une ou l’autre clé indifféremment.
Dans le BaseController
il y aurait before_action :authenticate_with_api_key_with_full_access
.
Sur les routes du crenauxcontroller il y aurait
skip_before_action :authenticate_with_api_key_with_full_access
before_action :authenticate_with_api_key_with_read_access
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
j'avais pensé à une signature dans ce genre, mais j'ai l'impression qu'elle avait quelques petits inconvénients :
- vu qu'on fait deux appels (le skip_before_action et le before_action), il y a un petit risque d'oublier un des deux, et d'avoir juste le skip, et donc un endpoint qui n'est pas protégé. L'implémentation actuelle permet plutôt de juste ajouter avec un appel "atomique" l'authentification en lecture seule.
- les outils automatisés de sécurité peuvent avoir tendance à voir des faux positifs si on a des
skip_before_action :authenticate_with_api_key_with_full_access
- quand je vois ce genre de skip_before_action (parfois en faisant une recherche qui affiche des résultats ligne par ligne), j'ai toujours une petite inquiétude de "est-ce qu'on a bien un autre mécanisme pour assurer l'authentification" (un peu une version humaine du point précédent), et là aussi un appel unique permet d'éviter ça.
En tout cas, c'est une bonne idée d'ajouter un commentaire explicatif, je fais ça.
@@ -27,3 +28,9 @@ Les équipes de SensioLabs nous indiquent travailler sur l’intégration de leu | |||
|
|||
L’API est implémenté par des contrôleurs tous regroupés dans `app/controllers/api/visioplainte`. | |||
Les appels à notre API sont authentifiées via un header `X-VISIOPLAINTE-API-KEY`. | |||
|
|||
## Intégration avec MaSécurité |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
très cool d’avoir mis de la doc 🙇
Co-authored-by: Adrien Di Pasquale <[email protected]>
c4f1348
to
b1f5ea1
Compare
Contexte
Pour éviter de démarrer un processus de visioplainte alors qu'il n'y a aucun créneau de disponible, l'équipe qui gère le site MaSécurité a aussi besoin d'accéder à l'application pour savoir s'il existe des créneaux.
Nous avons donc mis en place la possibilité de se connecter à l'api avec une clé avec des permissions en lecture seule, pour avoir le minimum de permissions.
Il y a donc deux maintenant clés d'api, celle en lecture-écriture pour Visioplainte, et celle en lecture seule pour MaSécurité.
Solution
On whiteliste les endpoints concernés avec un prepend_before_action