Ref : RFC 7628
there is also XOAUTH2, a similar protocol from Google, which is also widely supported
clients compatibles avec une auth OAuth2 avec notre propre serveur :
Serveurs
Dovecot
auth_mechanisms = plain login gssapi oauthbearer xoauth2 passdb { driver = oauth2 mechanisms = xoauth2 oauthbearer args = /etc/dovecot/conf.d/auth-oauth2.conf.ext }
et dans /etc/dovecot/conf.d/auth-oauth2.conf.ext
introspection_mode = auth # userinfo_endpoint de https://oidc.univ.fr/.well-known/openid-configuration : introspection_url = https://oidc.univ.fr/userinfo
Clients
Thunderbird desktop
Depuis Thunderbird 140 (sorti en 07/2025, version ESR), il existe l'API OAuth2Providers.registerProvider qui permet d'enregistrer un provider OAuth2. Cf https://bugzilla.mozilla.org/show_bug.cgi?id=1967370 .
L'UI pour le faire n'est pas encore, dispo, cf https://bugzilla.mozilla.org/show_bug.cgi?id=1602166#c48 .
Le plugin https://github.com/ttaeschn/Thunderbird-OAuth2-Provider-Plugin qui est un tout petit plugin Thunderbird qui appelle
OAuth2Providers.registerProvider. Il faut modifier le plugin et le packager.On peut aussi utiliser un fichier up1-tb.cfg pousser sur le post client pour appeler
OAuth2Providers.registerProvider
Thunderbird conserve le refresh_token dans les « Mots de passe enregistrés ».
Auto-Configuration
up1-tb.cfg...
... var { OAuth2Providers } = ChromeUtils.importESModule( "resource:///modules/OAuth2Providers.sys.mjs" ); OAuth2Providers.registerProvider( /*issuer*/ "P1PS", /*clientId & secret*/ "...", "...", /*endpoints*/ "https://oidc.univ.fr/oauth2/auth", "https://oidc.univ.fr/oauth2/token", /*redirectURI*/ "https://localhost/", /*usePKCE*/ false, /*hostnames*/ ["imap.univ.fr"], /*scopes*/ "email profile offline_access", );
SPNEGO pour la premier facteur
Cela fonctionne :
il faut autoriser le user-agent Thunderbird à faire du spnego sur le CAS password (
cas.authn.spnego.supportedBrowsers)il faut configurer Thunderbird :
network.negotiate-auth.trusted-uris: .univ.fr
Cookies
Thunderbird conserve les cookies. Lors qu'il quitte il supprime les cookies “de session”.
Donc si l'utilisateur choisit de faire du rememberMe (« Se souvenir de moi » et « Ne pas me redemander de code sur ce matériel pendant un mois »), les cookies cas/cas et cas/otp seront conservés :
sqlite3 ~/.thunderbird/*default/cookies.sqlite .dump | grep cas.univ.fr INSERT INTO moz_cookies VALUES(380,'','connect.sid','s%3AprLLC304xxxxx','cas.univ.fr','/otp',...); INSERT INTO moz_cookies VALUES(402,'','TGC','TGT-11-xxx-cas','cas.univ.fr','/cas/',...);
Il serait mieux de ne pas proposer de rememberMe et de n'avoir que des cookies de session (puisque le refresh_token est suffisant et d'usage restreint contrairement aux cookies CAS)
Pas possible d'utiliser un navigateur externe
Cf Thunderbird source code OAuth2.sys.mjs:
requestWindowURI = "chrome://messenger/content/browserRequest.xhtml" ... Services.ww.openWindow(... requestWindowURI ...)
FairEmail (Android)
En activant le mode débogage (dans Paramètres > Divers), il est possible de faire “Import providers” (dans Paramètres > Divers) pour importer le fichier ci-dessous.
On peut alors faire Assistant (dans Paramètres > Principal) et choisir “imap P1PS (OAuth)” dans la liste (NB : cela ne semble pas autorisé avec la version f-droid)
providers.xml
<provider name="imap univ" domain="univ\\.fr" id="imapuniv" link="https://www.univ.fr/" maxtls="1.2"> <imap host="imap.univ.fr" port="993" starttls="false" /> <smtp host="smtp.univ.fr" port="465" starttls="false" /> <oauth askAccount="true" authorizationEndpoint="https://oidc.univ.fr/oauth2/auth" clientId="..." clientSecret="..." enabled="true" privacy="https://www.pantheonsorbonne.fr/" redirectUri="https://oauth.faircode.eu/" scopes="email profile offline_access" tokenEndpoint="https://oidc.univ.fr/oauth2/token"> </oauth> </provider>
NB : on peut sûrement enlever certains properties (mais id est obligatoire)
imapproxy
https://salsa.debian.org/debian/imapproxy ne gère pas OAUTHBEARER.