Skip to content

Commit

Permalink
Ajoute paramètre idp_hint avec fournisseur identité suggéré
Browse files Browse the repository at this point in the history
Co-authored-by: Fabien Lamarque <[email protected]>
  • Loading branch information
egaillot and Fabinout committed May 14, 2024
1 parent 7c8c3f7 commit bafd5ab
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 9 deletions.
14 changes: 7 additions & 7 deletions .env.oots.template
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
AVEC_ENVOI_COOKIE_SUR_HTTP= #autorise envoi du cookie de session par HTTP avec valeur true
AVEC_REQUETE_PIECE_JUSTIFICATIVE= #active l'API /requete/pieceJustificative avec valeur true
AVEC_ENVOI_COOKIE_SUR_HTTP= # autorise envoi du cookie de session par HTTP avec valeur true
AVEC_REQUETE_PIECE_JUSTIFICATIVE= # active l'API /requete/pieceJustificative avec valeur true
IDENTIFIANT_EIDAS= # identifiant eIDAS injecté dans les requêtes (tant qu'on ne sait pas le récupérer)
URL_OOTS_FRANCE= # URL Serveur OOTS-France, ex. https://oots.gouv.fr

DELAI_MAX_ATTENTE_DOMIBUS= # délai maximum d'attente d'une réponse Domibus à une requête envoyée (en millisecondes)
IDENTIFIANT_EXPEDITEUR_DOMIBUS= # identifiant expéditeur Domibus
SUFFIXE_IDENTIFIANTS_DOMIBUS= # suffixe à ajouter dans les trames EBMS, ex. oots.eu
TYPE_IDENTIFIANT_EXPEDITEUR_DOMIBUS= # type d'identifiant expéditeur Domibus
URL_BASE_DOMIBUS= # URL instance Domibus, ex. https://domibus.gouv.fr

AVEC_AUTHENTIFICATION_EIDAS= # si renseigné à `true`, passe par le « bridge eIDAS » pour l'authentification
CLE_PRIVEE_JWK_EN_BASE64= # Cle privée utilisée pour déchiffrer les infos utilisateur provenant de eIDAS (données au format JWK, chiffrées en base64)
IDENTIFIANT_CLIENT_FCPLUS= # identifiant d'accès au serveur FC+
SECRET_CLIENT_FCPLUS= # secret d'accès au serveur FC+
URL_CONFIGURATION_OPEN_ID_FCPLUS= # URL accès aux informations de configuration Open ID de FranceConnect+

CLE_PRIVEE_JWK_EN_BASE64= # Cle privée utilisée pour déchiffrer les infos utilisateur provenant de eIDAS (données au format JWK, chiffrées en base64)
SECRET_JETON_SESSION= # secret utilisé pour chiffrer et déchiffrer le jeton stocké dans le cookie de session
IDENTIFIANT_EIDAS= # identifiant eIDAS injecté dans les requêtes (tant qu'on ne sait pas le récupérer)
URL_OOTS_FRANCE= # URL Serveur OOTS-France, ex. https://oots.gouv.fr
URL_CONFIGURATION_OPEN_ID_FCPLUS= # URL accès aux informations de configuration Open ID de FranceConnect+
URL_REDIRECTION_CONNEXION= # URL redirection après authentification FranceConnect+
URL_REDIRECTION_DECONNEXION= # URL redirection après destruction session FranceConnect+

Expand Down
3 changes: 3 additions & 0 deletions src/adaptateurs/adaptateurEnvironnement.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const avecEnvoiCookieSurHTTP = () => process.env.AVEC_ENVOI_COOKIE_SUR_HTTP ===

const clePriveeJWK = () => JSON.parse(atob(process.env.CLE_PRIVEE_JWK_EN_BASE64));

const fournisseurIdentiteSuggere = () => (process.env.AVEC_AUTHENTIFICATION_EIDAS === 'true' ? 'eidas-bridge' : '');

const identifiantClient = () => process.env.IDENTIFIANT_CLIENT_FCPLUS;

const identifiantEIDAS = () => process.env.IDENTIFIANT_EIDAS;
Expand All @@ -26,6 +28,7 @@ module.exports = {
avecEnvoiCookieSurHTTP,
avecRequetePieceJustificative,
clePriveeJWK,
fournisseurIdentiteSuggere,
identifiantClient,
identifiantEIDAS,
parametresRequeteJeton,
Expand Down
2 changes: 1 addition & 1 deletion src/api/creationSessionFCPlus.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const creationSessionFCPlus = (config, requete, reponse) => {

return adaptateurFranceConnectPlus.urlCreationSession()
.then((url) => reponse.redirect(
`${url}?scope=profile%20openid&acr_values=eidas2&claims={%22id_token%22:{%22amr%22:{%22essential%22:true}}}&prompt=login%20consent&response_type=code&client_id=${identifiantClient}&redirect_uri=${urlRedirectionConnexion}&state=${etat}&nonce=${nonce}`,
`${url}?scope=profile%20openid&acr_values=eidas2&claims={%22id_token%22:{%22amr%22:{%22essential%22:true}}}&prompt=login%20consent&response_type=code&idp_hint=${adaptateurEnvironnement.fournisseurIdentiteSuggere()}&client_id=${identifiantClient}&redirect_uri=${urlRedirectionConnexion}&state=${etat}&nonce=${nonce}`,
));
};

Expand Down
22 changes: 21 additions & 1 deletion test/api/creationSessionFCPlus.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ describe('Le requêteur de création de session FC+', () => {

beforeEach(() => {
adaptateurChiffrement.cleHachage = () => '';
adaptateurEnvironnement.fournisseurIdentiteSuggere = () => '';
adaptateurEnvironnement.identifiantClient = () => '';
adaptateurEnvironnement.urlRedirectionConnexion = () => '';
adaptateurFranceConnectPlus.urlCreationSession = () => Promise.resolve('');
Expand All @@ -33,7 +34,7 @@ describe('Le requêteur de création de session FC+', () => {
});

it('ajoute des paramètres à la requête', () => {
expect.assertions(5);
expect.assertions(6);

reponse.redirect = (url) => {
try {
Expand All @@ -42,6 +43,7 @@ describe('Le requêteur de création de session FC+', () => {
expect(url).toContain('claims={%22id_token%22:{%22amr%22:{%22essential%22:true}}}');
expect(url).toContain('prompt=login%20consent');
expect(url).toContain('response_type=code');
expect(url).toContain('idp_hint=');

return Promise.resolve();
} catch (e) {
Expand Down Expand Up @@ -107,4 +109,22 @@ describe('Le requêteur de création de session FC+', () => {

return creationSessionFCPlus(config, requete, reponse);
});

describe('Si utilisation bridge eIDAS', () => {
it('renseigne le paramètre `idp_hint` avec la valeur `eidas-bridge`', () => {
expect.assertions(1);
adaptateurEnvironnement.fournisseurIdentiteSuggere = () => 'eidas-bridge';

reponse.redirect = (url) => {
try {
expect(url).toContain('idp_hint=eidas-bridge');
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
};

return creationSessionFCPlus(config, requete, reponse);
});
});
});
1 change: 1 addition & 0 deletions test/routes/serveurTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const serveurTest = () => {
adaptateurEnvironnement = {
avecEnvoiCookieSurHTTP: () => true,
avecRequetePieceJustificative: () => true,
fournisseurIdentiteSuggere: () => '',
identifiantClient: () => '',
identifiantEIDAS: () => 'FR/BE/123456789',
secretJetonSession: () => 'secret',
Expand Down

0 comments on commit bafd5ab

Please sign in to comment.