Forcer une nouvelle vérification
Exigez une nouvelle confirmation de l'alias avant une action sensible, avec prompt=login ou max_age.
Par défaut, un utilisateur déjà connecté à pismile revient sur votre site sans refaire la vérification (_single sign-on_). Avant une action sensible — un retrait, un changement de bénéficiaire, une signature — vous pouvez exiger une nouvelle confirmation depuis son application bancaire.
Les trois règles#
Situation | Ce que fait pismile |
|---|---|
| Nouvelle vérification à chaque fois |
| Nouvelle vérification si la dernière date de plus de |
Dernière vérification de plus de 90 jours | Nouvelle vérification automatique, sans rien demander de votre côté |
Dans tous les cas, la claim auth_time du jeton d'identité indique la date de la dernière vérification.
Ajouter prompt ou max_age#
@Bean
SecurityFilterChain security(HttpSecurity http, ClientRegistrationRepository registrations) throws Exception {
DefaultOAuth2AuthorizationRequestResolver resolver =
new DefaultOAuth2AuthorizationRequestResolver(registrations, "/oauth2/authorization");
resolver.setAuthorizationRequestCustomizer(OAuth2AuthorizationRequestCustomizers.withPkce()
.andThen(builder -> builder.additionalParameters(params -> params.put("max_age", 300))));
http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
.oauth2Login(login -> login.authorizationEndpoint(endpoint -> endpoint.authorizationRequestResolver(resolver)));
return http.build();
}// Nouvelle vérification si la dernière date de plus de 5 minutes
res.redirect(
client.authorizationUrl({
scope: "openid profile",
state,
code_challenge: generators.codeChallenge(verifier),
code_challenge_method: "S256",
max_age: 300, // ou : prompt: 'login'
}),
);
// Au retour, max_age impose la vérification de auth_time par openid-client
const tokens = await client.callback(
"https://votre-site.com/login/oauth2/code/pismile",
client.callbackParams(req),
{ code_verifier: verifier, state, max_age: 300 },
);<?php
$oidc = new Jumbojett\OpenIDConnectClient('https://pismile.com', 'VOTRE_CLIENT_ID', getenv('PISMILE_CLIENT_SECRET'));
$oidc->setRedirectURL('https://votre-site.com/login/oauth2/code/pismile');
$oidc->addScope(['openid', 'profile']);
$oidc->addAuthParam(['prompt' => 'login']); // ou : ['max_age' => 300]
$oidc->authenticate();Vérifier auth_time côté serveur#
Ne faites pas confiance au seul paramètre envoyé : vérifiez la date reçue avant d'exécuter l'action sensible.
Instant verifiedAt = user.getAuthenticatedAt(); // OidcUser : claim auth_time
if (verifiedAt == null || verifiedAt.isBefore(Instant.now().minusSeconds(300))) {
throw new AccessDeniedException("Nouvelle vérification requise");
}const claims = tokens.claims();
if (!claims.auth_time || Date.now() / 1000 - claims.auth_time > 300) {
return res.status(403).send("Nouvelle vérification requise");
}$authTime = $oidc->getVerifiedClaims('auth_time');
if (!$authTime || time() - $authTime > 300) {
http_response_code(403);
exit('Nouvelle vérification requise');
}Cette page vous a-t-elle aidé ?
Merci, votre avis nous aide à améliorer la documentation.