Aprovall Forms Watch Veille formulaires e-Attestations
Connexion
Accès réservé aux administrateurs e-Attestations. Connectez-vous avec votre jeton formulaire-admin.
Vérification du jeton…
Comment récupérer le jeton ? Avec le favori « Jeton e-Attestations »
Glissez ce bouton dans votre barre de favoris : ★ Jeton e-Attestations
Ouvrez formulaire-admin.e-attestations.com et connectez-vous comme d'habitude.
Cliquez sur le favori : le jeton est copié dans le presse-papier et cette page s'ouvre déjà connectée. Sinon, collez le jeton ci-dessus.
Le favori réutilise votre session e-Attestations (client public de l'interface, échange de code avec PKCE). Le jeton transite dans le fragment d'URL (#token=), jamais dans les journaux du serveur. Il est vérifié côté serveur (signature, émetteur, expiration) puis conservé en mémoire pour alimenter l'ingestion.
Créer le favori à la main (copier le code) javascript:(async()=>{ const KC='https://auth.e-attestations.com/auth/realms/eat_realm/protocol/openid-connect',CID='formulaire-admin-web',APP='https://form.aprovall.app',HOST='formulaire-admin.e-attestations.com'; if(location.hostname!==HOST){alert('Ouvrez d’abord https://'+HOST+' (en étant connecté), puis cliquez sur ce favori.');return;} const RURI=location.origin+'/env.js'; const b64=b=>btoa(String.fromCharCode(...new Uint8Array(b))).replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,''); const rnd=()=>{const a=new Uint8Array(32);crypto.getRandomValues(a);return b64(a);}; const verifier=rnd(),nonce=rnd();let state=rnd(); const challenge=b64(await crypto.subtle.digest('SHA-256',new TextEncoder().encode(verifier))); const authUrl=silent=>KC+'/auth?client_id='+CID+'&redirect_uri='+encodeURIComponent(RURI)+'&response_type=code&response_mode=fragment&scope=openid&state='+state+'&nonce='+nonce+'&code_challenge='+challenge+'&code_challenge_method=S256'+(silent?'&prompt=none':''); const w=window.open(authUrl(true),'eat_token','width=560,height=720'); if(!w){alert('Fenêtre bloquée : autorisez les pop-ups pour ce site puis réessayez.');return;} let retried=false; const code=await new Promise((res,rej)=>{let n=0;const t=setInterval(()=>{n++; try{if(w.closed){clearInterval(t);rej('Fenêtre fermée avant la fin.');return;} const h=w.location.hash;if(h&&h.indexOf('state=')>-1){const p=new URLSearchParams(h.slice(1));if(p.get('state')!==state)return; if(p.get('error')){if(p.get('error')==='login_required'&&!retried){retried=true;state=rnd();w.location.replace(authUrl(false));return;}clearInterval(t);w.close();rej(p.get('error_description')||p.get('error'));return;} clearInterval(t);res(p.get('code'));}}catch(e){} if(n>3600){clearInterval(t);w.close();rej('Délai dépassé.');}},50);}).catch(e=>{alert('Jeton e-Attestations : '+e);return null;}); if(!code)return; let tok; try{const r=await fetch(KC+'/token',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:new URLSearchParams({grant_type:'authorization_code',client_id:CID,code:code,redirect_uri:RURI,code_verifier:verifier})});tok=await r.json();}catch(e){alert('Échange du code impossible : '+e);w.close();return;} if(!tok||!tok.access_token){alert('Keycloak n’a pas renvoyé de jeton : '+JSON.stringify(tok).slice(0,200));w.close();return;} try{await navigator.clipboard.writeText(tok.access_token);}catch(e){} const frag='#token='+encodeURIComponent(tok.access_token)+(tok.refresh_token?'&refresh='+encodeURIComponent(tok.refresh_token)+'&refresh_expires_in='+(tok.refresh_expires_in||''):''); w.location.replace(APP+'/login'+frag);try{w.resizeTo(1280,860);w.focus();}catch(e){} })();
ou avec le mot de passe d'accès
Mot de passe d'accès
Se connecter