Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Restreint local-sign-in derrière des tokens par fournisseur (DP-1855) - #1693

#1693
Open
jbfeldis wants to merge 2 commits into
developetalab/data_pass:developfrom
feature/dp-1855-security-restreindre-local-sign-in-sur-stagingetalab/data_pass:feature/dp-1855-security-restreindre-local-sign-in-sur-stagingCopy head branch name to clipboard
Open

Restreint local-sign-in derrière des tokens par fournisseur (DP-1855)#1693
jbfeldis wants to merge 2 commits into
developetalab/data_pass:developfrom
feature/dp-1855-security-restreindre-local-sign-in-sur-stagingetalab/data_pass:feature/dp-1855-security-restreindre-local-sign-in-sur-stagingCopy head branch name to clipboard

Conversation

@jbfeldis

Copy link
Copy Markdown
Contributor

Contexte

Réponse à l'incident DP-1848 (abus sur staging : créations en masse et tentatives
d'injection via le compte démo, entrées par local-sign-in).

Ce que fait la PR

local-sign-in est protégé par un token secret sur les environnements où des tokens
sont configurés dans les credentials (staging + sandbox).

  • Les tokens sont un dictionnaire nommé par fournisseur de données
    (local_sign_in_tokens: { dgfip: …, api_entreprise: … }) : chaque FD a le sien,
    révocable individuellement. N'importe quel token valide déverrouille.
  • Le fournisseur utilisé est journalisé ([local-sign-in] accès via le token « <fd> » — email=… ip=…), uniquement sur les environnements protégés — brique de traçabilité
    légère (prépare DP-1857).
  • Sans token valide → 404 (mimique la production, muet pour un scanner).
  • Token fourni via ?token=…, validé en temps constant (secure_compare), puis mémorisé
    dans un cookie signé (30 j) : les accès suivants n'ont plus besoin du token.
  • Le panneau « Connexion rapide » est masqué tant que l'environnement n'est pas déverrouillé.
  • Production : inchangé (la route n'existe pas).
  • Développement / test : ouverts par défaut ; protection activable en ajoutant des
    tokens aux credentials de l'environnement.

Une seule règle hors-prod : la protection s'active dès qu'au moins un token existe dans les
credentials — aucun code à toucher pour couvrir un nouvel environnement ou ajouter un FD.

Implémentation

  • LocalSignInPolicy (PORO) : décision pure + matched_provider, testé unitairement.
  • LocalSignInProtection (concern) : lecture params/cookie, pose du cookie, log, head :not_found.

Tests

  • spec/services/local_sign_in_policy_spec.rb — matrice tokens × cookie + matched_provider + cas prod.
  • spec/requests/local_sign_in_spec.rb — bout-en-bout HTTP + aller-retour cookie + log FD + panneau masqué.
  • 19 examples, rubocop clean, brakeman sans nouvelle alerte.

Protège l'endpoint local-sign-in contre les abus (incident DP-1848) sur les
environnements où des tokens sont configurés dans les credentials (staging,
sandbox) ; production inchangée (route absente), dev/test ouverts par défaut.

- Tokens = dictionnaire nommé par fournisseur de données
  (`local_sign_in_tokens`), révocables individuellement ; n'importe quel token
  valide déverrouille.
- Sans token valide : 404 (mimique la prod). Token validé en temps constant
  (secure_compare) puis mémorisé dans un cookie signé (30 j).
- Journalise le fournisseur utilisé (+ email, IP) sur les envs protégés.
- Panneau « Connexion rapide » masqué tant que l'environnement n'est pas déverrouillé.

Logique de décision isolée dans LocalSignInPolicy (PORO testé unitairement) ;
glue HTTP dans le concern LocalSignInProtection.
@linear

linear Bot commented Jul 16, 2026

Copy link
Copy Markdown

DP-1855

@jbfeldis
jbfeldis force-pushed the feature/dp-1855-security-restreindre-local-sign-in-sur-staging branch from 6ac316c to 3140be2 Compare July 17, 2026 14:28
@jbfeldis
jbfeldis marked this pull request as ready for review July 19, 2026 16:10
@skelz0r
skelz0r requested a review from JeSuisUnCaillou July 21, 2026 14:51
@skelz0r

skelz0r commented Jul 21, 2026

Copy link
Copy Markdown
Member

(@JeSuisUnCaillou je t'ai request vu que JB m'avait demandé de repasser dessus imo il devait pensé que j'étais le seul sur le pont)

@JeSuisUnCaillou JeSuisUnCaillou left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il reste un problème selon moi : Toute personne local-signed-in en tant qu'admin peut aller retirer des droits à des FD qui ont des tokens pour l'API Datapass en staging sur leurs comptes nominatif.

Plus quelques commentaires 👇

Comment thread CLAUDE.md
Comment on lines +146 to +148
N’importe quel token valide déverrouille l’accès ; le fournisseur utilisé est journalisé
(`[local-sign-in] accès via le token « <fd> » — email=… ip=…`). Le token est ensuite mémorisé dans un
cookie signé (30 jours) : une fois fourni une première fois, les liens suivants fonctionnent sans le

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je mettrai pas d'expiration pour se faciliter la vie, mais ça se discute

Comment thread CLAUDE.md
#### Protection par token (staging & sandbox)

Sur **staging** et **sandbox**, `local-sign-in` est protégé par un token secret (défense contre les abus,
cf. DP-1855). Il faut ajouter `&token=<secret>` à l’URL. Les tokens vivent dans les credentials chiffrées de

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour faciliter l'utilisation par les partenaires, faudrait mettre un input pour renseigner le token dans l'UI, plutôt que leur faire faire une manip d'url. Ou une alert avec input, quoi.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.