Skip to content

Commit 2082cac

Browse files
authored
Fix/proconnect state nonce (#372)
* fix: proconnect sate & nonce * fix: proconnect fixes
1 parent 56f3182 commit 2082cac

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/server/src/index.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ async function init() {
4444
// Middleware CORS
4545
app.use(
4646
cors({
47-
origin: process.env.CLIENT_BASE_URL, // Remplacez par l'URL de votre frontend
47+
origin: process.env.CLIENT_BASE_URL,
4848
credentials: true, // Autorise l'envoi des cookies avec les requêtes
4949
})
5050
);
5151

5252
// Middleware de session
5353
app.use(
5454
session({
55-
secret: SESSION, // Utilisez une chaîne sécurisée
55+
secret: SESSION, // Clé secrète pour signer le cookie de session
5656
resave: false,
5757
saveUninitialized: false,
5858
cookie: {
@@ -63,6 +63,7 @@ async function init() {
6363
})
6464
);
6565
app.use((req, res, next) => {
66+
console.log("SESSION-ID:", req.sessionID, "route:", req.path);
6667
next();
6768
});
6869
// Body parsers
@@ -105,15 +106,15 @@ async function init() {
105106
// Stocker dans la session
106107
req.session.state = state;
107108
req.session.nonce = nonce;
109+
108110
if (isDev()) {
109111
logger.debug({ state, nonce }, "Init ProConnect auth");
110112
}
111113
const authorizationUrl = proconnectClient.authorizationUrl({
112-
scope:
113-
"openid given_name usual_name email siret profile organization custom idp_id",
114-
state: state,
115-
nonce: nonce,
116-
acr_values: "eidas1",
114+
scope: "openid given_name usual_name email siret idp_id",
115+
state,
116+
nonce,
117+
// acr_values: "eidas1",
117118
claims: {
118119
id_token: {
119120
amr: {
@@ -123,7 +124,10 @@ async function init() {
123124
},
124125
});
125126

126-
res.redirect(authorizationUrl);
127+
req.session.save((err) => {
128+
if (err) return next(err);
129+
res.redirect(authorizationUrl);
130+
});
127131
});
128132

129133
// Route de callback pour gérer la réponse de ProConnect
@@ -148,19 +152,21 @@ async function init() {
148152
nonce: storedNonce,
149153
}
150154
);
155+
// Stocker tokenSet dans la session pour une utilisation ultérieure (par exemple, pour le logout)
156+
req.session.tokenSet = tokenSet;
151157
// Supprimer le state et le nonce de la session après l'appel réussi
152158
delete req.session.state;
153159
delete req.session.nonce;
154160

155-
// Stocker tokenSet dans la session pour une utilisation ultérieure (par exemple, pour le logout)
156-
req.session.tokenSet = tokenSet;
157-
158161
// Récupérer les informations utilisateur
159162
const userInfo = await proconnectClient.userinfo(tokenSet.access_token);
160163
req.session.user = userInfo;
161164
if (isDev()) {
162165
logger.debug({ tokenSet }, "TokenSet received from ProConnect");
163166
}
167+
if (isDev()) {
168+
logger.debug({ tokenSet }, "TokenSet received from ProConnect");
169+
}
164170
// Rediriger vers le frontend après l'authentification
165171
res.redirect("/");
166172
} catch (error) {

0 commit comments

Comments
 (0)