Documentation
Pages enfant
  • SASL OAUTHBEARER : MFA pour IMAP/SMTP
  • 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 :

    • Thunderbird desktop : via plugin ou autoconfiguration

    • Thunderbird android : pas possible, cf issue

    • FairEmail (android) : « To use custom OAuth, an XML file containing the server and OAuth data, like the client secret, should be created and imported » (cf FAQ)

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 .

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.

  • Aucune étiquette