Hello,
Dovecot 2.3.15 installed from repository on CentOS 7.9
I would like to try the oauth2 mechanism to autenticate my users.
I have installed a working demo of KeyCloak and I have a working installation of Dovecot 2.3.15 with LDAP backend and plain authentication.
My Thunderbird client always says "that the server doesn't manage the authentication method", but with a "openssl s_client -connect" command I get:
- OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=OAUTHBEARER AUTH=XOAUTH2] IMAP ready.
Putting Dovecot in debug I can't see any error or warning on oauth2 authentication.
I'm following the offical guide:
auth_mechanisms = plain oauthbearer xoauth2
passdb { driver = oauth2 mechanisms = xoauth2 oauthbearer args = /etc/dovecot/dovecot-oauth2.conf.ext }
/etc/dovecot/dovecot-oauth2.conf.ext: tokeninfo_url = https://www.googleapis.com/oauth2/v3/tokeninfo?access_token= introspection_url = https://www.googleapis.com/oauth2/v2/userinfo #force_introspection = yes username_attribute = email tls_ca_cert_file = /etc/ssl/certs/ca-certificates.crt
I'm using an explicit wrong configuration to thrown some errors and verify that Dovecot is really using the OAUTH2 mechanism, but I don't get any errors...
What I'm doing wrong?
Thanks, Andrea
--
Okay, okay, I'll take it back ... UNfuck you !
TIM San Marino S.p.A. Andrea Gabellini Engineering R&D TIM San Marino S.p.A. - https://www.telecomitalia.sm Via Ventotto Luglio, 212 - Piano -2 47893 - Borgo Maggiore - Republic of San Marino Tel: (+378) 0549 886237 Fax: (+378) 0549 886188
-- Informativa Privacy
Questa email ha per destinatari dei contatti presenti negli archivi di TIM San Marino S.p.A.. Tutte le informazioni vengono trattate e tutelate nel rispetto della normativa vigente sulla protezione dei dati personali (Reg. EU 2016/679). Per richiedere informazioni e/o variazioni e/o la cancellazione dei vostri dati presenti nei nostri archivi potete inviare una email a privacy@telecomitalia.sm.
Avviso di Riservatezza
Il contenuto di questa e-mail e degli eventuali allegati e' strettamente confidenziale e destinato alla/e persona/e a cui e' indirizzato. Se avete ricevuto per errore questa e-mail, vi preghiamo di segnalarcelo immediatamente e di cancellarla dal vostro computer. E' fatto divieto di copiare e divulgare il contenuto di questa e-mail. Ogni utilizzo abusivo delle informazioni qui contenute da parte di persone terze o comunque non indicate nella presente e-mail potra' essere perseguito ai sensi di legge.
Hi!
I would like to try the oauth2 mechanism to autenticate my users.
[...]
My Thunderbird client [...]
Not a Thunderbird/Dovecot expert here, so only talking about my experience. We have a setup here with Dovecot supporting OAUTHBEARER & XOAUTH2 to allow our web-based interface (Open-Xchange) to use our SSO (also provided by Keycloak) and that works fine. However, we also got questions from users about Thunderbird so I had a quick look into it.
From what I understand, from digging into https://bugzilla.mozilla.org/ and Thunderbird source code, Thunderbird is using a static list of Oauth2 providers, for which it stores the clientId/clientSecret/authorizationEndpoint/tokenEndpoint statically in its source code.
As a result, I think Thunderbird can't support Oauth2 for a standard Dovecot installation without patches... (But I would love to be proven wrong and be able to provide Oauth support to our users!)
Cheers, Vincent
PS: Thunderbird hardcoded list: https://github.com/mozilla/releases-comm-central/blob/master/mailnews/base/s...
Hello Vincent,
this explains many things... :-(
Do you know if the same applies also to other clients like Apple Mail and Outlook 20xx?
Thanks, Andrea
PS: Can you share your /etc/dovecot/dovecot-oauth2.conf.ext
Il 24/06/21 11:24, Vincent Brillault ha scritto:
Hi!
I would like to try the oauth2 mechanism to autenticate my users.
[...]
My Thunderbird client [...] Not a Thunderbird/Dovecot expert here, so only talking about my experience. We have a setup here with Dovecot supporting OAUTHBEARER & XOAUTH2 to allow our web-based interface (Open-Xchange) to use our SSO (also provided by Keycloak) and that works fine. However, we also got questions from users about Thunderbird so I had a quick look into it.
From what I understand, from digging into https://bugzilla.mozilla.org/ and Thunderbird source code, Thunderbird is using a static list of Oauth2 providers, for which it stores the clientId/clientSecret/authorizationEndpoint/tokenEndpoint statically in its source code.
As a result, I think Thunderbird can't support Oauth2 for a standard Dovecot installation without patches... (But I would love to be proven wrong and be able to provide Oauth support to our users!)
Cheers, Vincent
PS: Thunderbird hardcoded list: https://github.com/mozilla/releases-comm-central/blob/master/mailnews/base/s...
--
How can you respect a machine controlled by a mouse?
TIM San Marino S.p.A. Andrea Gabellini Engineering R&D TIM San Marino S.p.A. - https://www.telecomitalia.sm Via Ventotto Luglio, 212 - Piano -2 47893 - Borgo Maggiore - Republic of San Marino Tel: (+378) 0549 886237 Fax: (+378) 0549 886188
-- Informativa Privacy
Questa email ha per destinatari dei contatti presenti negli archivi di TIM San Marino S.p.A.. Tutte le informazioni vengono trattate e tutelate nel rispetto della normativa vigente sulla protezione dei dati personali (Reg. EU 2016/679). Per richiedere informazioni e/o variazioni e/o la cancellazione dei vostri dati presenti nei nostri archivi potete inviare una email a privacy@telecomitalia.sm.
Avviso di Riservatezza
Il contenuto di questa e-mail e degli eventuali allegati e' strettamente confidenziale e destinato alla/e persona/e a cui e' indirizzato. Se avete ricevuto per errore questa e-mail, vi preghiamo di segnalarcelo immediatamente e di cancellarla dal vostro computer. E' fatto divieto di copiare e divulgare il contenuto di questa e-mail. Ogni utilizzo abusivo delle informazioni qui contenute da parte di persone terze o comunque non indicate nella presente e-mail potra' essere perseguito ai sensi di legge.
Hi Andrea,
Do you know if the same applies also to other clients like Apple Mail and Outlook 20xx?
Sorry, I have not looked into it so I can't answer this. What I don't understand really in the way OAUTHBEARER or XOAUTH2 works with IMAP is how the client is supposed to know where to obtain a token from (or does it need to be explicitly configured?)...
PS: Can you share your /etc/dovecot/dovecot-oauth2.conf.ext
Sure (some values have been replaced by capital letters). I'm doing it quite differently from you, using local introspection:
introspection_mode = local
local_validation_key_dict = fs:posix:prefix=/etc/dovecot/keys/
issuers = https://XXXX/auth/realms/ZZZ
scope = email
username_attribute = AAAA
username_format = %n
# Hack to forcefully validate the aud
active_attribute = aud
active_value = YYYYY
And then I have to populate /etc/dovecot/keys
as per
https://doc.dovecot.org/configuration_manual/authentication/oauth2/#local-va...
To debug the authentication/setup, here is what I did:
- Obtain a token from our local keycloak:
curl --location --request POST
'https://XXXX/auth/realms/ZZZ/protocol/openid-connect/token' --header
'Content-Type: application/x-www-form-urlencoded' --data-urlencode
'grant_type=password' --data-urlencode 'client_id=YYYYY'
--data-urlencode 'username=${username}' --data-urlencode
"password=${password}" --data-urlencode "client_secret=${secret_key}" |
jq '"n,a=${username},\u0001host=XXXX\u0001port=993\u0001auth=Bearer
\(.access_token)\u0001\u0001" | @base64' -r
- Pass that token to IMAP through
a1 authenticate oauthbearer ....
I hope this can help, Cheers, Vincent
Hi Vincent,
Thank you very much for your support!!!
Il 24/06/21 15:21, Vincent Brillault ha scritto:
Hi Andrea,
Do you know if the same applies also to other clients like Apple Mail and Outlook 20xx? Sorry, I have not looked into it so I can't answer this. What I don't understand really in the way OAUTHBEARER or XOAUTH2 works with IMAP is how the client is supposed to know where to obtain a token from (or does it need to be explicitly configured?)... PS: Can you share your /etc/dovecot/dovecot-oauth2.conf.ext Sure (some values have been replaced by capital letters). I'm doing it quite differently from you, using local introspection:
introspection_mode = local local_validation_key_dict = fs:posix:prefix=/etc/dovecot/keys/ issuers = https://XXXX/auth/realms/ZZZ scope = email username_attribute = AAAA username_format = %n # Hack to forcefully validate the aud active_attribute = aud active_value = YYYYY
And then I have to populate
/etc/dovecot/keys
as per https://doc.dovecot.org/configuration_manual/authentication/oauth2/#local-va...To debug the authentication/setup, here is what I did:
- Obtain a token from our local keycloak:
curl --location --request POST 'https://XXXX/auth/realms/ZZZ/protocol/openid-connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=password' --data-urlencode 'client_id=YYYYY' --data-urlencode 'username=${username}' --data-urlencode "password=${password}" --data-urlencode "client_secret=${secret_key}" | jq '"n,a=${username},\u0001host=XXXX\u0001port=993\u0001auth=Bearer \(.access_token)\u0001\u0001" | @base64' -r
- Pass that token to IMAP through
a1 authenticate oauthbearer ....
I hope this can help, Cheers, Vincent
--
A winner says, "It may be difficult, but it's possible." A loser says, "It may be possible, but it's too difficult."
TIM San Marino S.p.A. Andrea Gabellini Engineering R&D TIM San Marino S.p.A. - https://www.telecomitalia.sm Via Ventotto Luglio, 212 - Piano -2 47893 - Borgo Maggiore - Republic of San Marino Tel: (+378) 0549 886237 Fax: (+378) 0549 886188
-- Informativa Privacy
Questa email ha per destinatari dei contatti presenti negli archivi di TIM San Marino S.p.A.. Tutte le informazioni vengono trattate e tutelate nel rispetto della normativa vigente sulla protezione dei dati personali (Reg. EU 2016/679). Per richiedere informazioni e/o variazioni e/o la cancellazione dei vostri dati presenti nei nostri archivi potete inviare una email a privacy@telecomitalia.sm.
Avviso di Riservatezza
Il contenuto di questa e-mail e degli eventuali allegati e' strettamente confidenziale e destinato alla/e persona/e a cui e' indirizzato. Se avete ricevuto per errore questa e-mail, vi preghiamo di segnalarcelo immediatamente e di cancellarla dal vostro computer. E' fatto divieto di copiare e divulgare il contenuto di questa e-mail. Ogni utilizzo abusivo delle informazioni qui contenute da parte di persone terze o comunque non indicate nella presente e-mail potra' essere perseguito ai sensi di legge.
Hello Vincent,
I'm trying to use your suggestion but I stopped on a trivial detail...
I have created the key dictionary, and dovecot found it, but I receive this error "oauth2 failed: Local validation failed: Cannot load key: Unknown key format"
I simply put in a file /etc/dovecot/keys/webmail/RS256/<key id> the value of the public key found on the keycloak console.
Which is the correct format of that file?
Thanks in advance, Andrea
Il 24/06/21 15:21, Vincent Brillault ha scritto:
Hi Andrea,
Do you know if the same applies also to other clients like Apple Mail and Outlook 20xx? Sorry, I have not looked into it so I can't answer this. What I don't understand really in the way OAUTHBEARER or XOAUTH2 works with IMAP is how the client is supposed to know where to obtain a token from (or does it need to be explicitly configured?)... PS: Can you share your /etc/dovecot/dovecot-oauth2.conf.ext Sure (some values have been replaced by capital letters). I'm doing it quite differently from you, using local introspection:
introspection_mode = local local_validation_key_dict = fs:posix:prefix=/etc/dovecot/keys/ issuers = https://XXXX/auth/realms/ZZZ scope = email username_attribute = AAAA username_format = %n # Hack to forcefully validate the aud active_attribute = aud active_value = YYYYY
And then I have to populate
/etc/dovecot/keys
as per https://doc.dovecot.org/configuration_manual/authentication/oauth2/#local-va...To debug the authentication/setup, here is what I did:
- Obtain a token from our local keycloak:
curl --location --request POST 'https://XXXX/auth/realms/ZZZ/protocol/openid-connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=password' --data-urlencode 'client_id=YYYYY' --data-urlencode 'username=${username}' --data-urlencode "password=${password}" --data-urlencode "client_secret=${secret_key}" | jq '"n,a=${username},\u0001host=XXXX\u0001port=993\u0001auth=Bearer \(.access_token)\u0001\u0001" | @base64' -r
- Pass that token to IMAP through
a1 authenticate oauthbearer ....
I hope this can help, Cheers, Vincent
--
Will the information superhighway have any rest stops?
TIM San Marino S.p.A. Andrea Gabellini Engineering R&D TIM San Marino S.p.A. - https://www.telecomitalia.sm Via Ventotto Luglio, 212 - Piano -2 47893 - Borgo Maggiore - Republic of San Marino Tel: (+378) 0549 886237 Fax: (+378) 0549 886188
-- Informativa Privacy
Questa email ha per destinatari dei contatti presenti negli archivi di TIM San Marino S.p.A.. Tutte le informazioni vengono trattate e tutelate nel rispetto della normativa vigente sulla protezione dei dati personali (Reg. EU 2016/679). Per richiedere informazioni e/o variazioni e/o la cancellazione dei vostri dati presenti nei nostri archivi potete inviare una email a privacy@telecomitalia.sm.
Avviso di Riservatezza
Il contenuto di questa e-mail e degli eventuali allegati e' strettamente confidenziale e destinato alla/e persona/e a cui e' indirizzato. Se avete ricevuto per errore questa e-mail, vi preghiamo di segnalarcelo immediatamente e di cancellarla dal vostro computer. E' fatto divieto di copiare e divulgare il contenuto di questa e-mail. Ogni utilizzo abusivo delle informazioni qui contenute da parte di persone terze o comunque non indicate nella presente e-mail potra' essere perseguito ai sensi di legge.
Hi Andrea, all
I simply put in a file /etc/dovecot/keys/webmail/RS256/<key id> the value of the public key found on the keycloak console.
Which is the correct format of that file?
It's json. I had the same question initially, had to check the code.
I obtain that file from https://${keycloak}/auth/realms/${realm}/protocol/openid-connect/certs (jwks_uri link in https://${keycloak}/auth/realms/${realm}/.well-known/openid-configuration)
It looks something like: {"kid": "...", "kty": "RSA", "alg": "RS256", "use": "sig", "n": ... "e": "AQAB", "x5c": ["....."], "x5t": "...", "x5t#S256": "..."}
I see from the documentation that 2.3.16 will support auto discovery: https://doc.dovecot.org/configuration_manual/authentication/oauth2/#openid-d...
Cheers, Vincent
Hi Vincent,
you saved my day :-)
Andrea
Il 30/06/21 10:29, Vincent Brillault ha scritto:
Hi Andrea, all
I simply put in a file /etc/dovecot/keys/webmail/RS256/<key id> the value of the public key found on the keycloak console.
Which is the correct format of that file? It's json. I had the same question initially, had to check the code.
I obtain that file from https://${keycloak}/auth/realms/${realm}/protocol/openid-connect/certs (jwks_uri link in https://${keycloak}/auth/realms/${realm}/.well-known/openid-configuration)
It looks something like:
{"kid": "...", "kty": "RSA", "alg": "RS256", "use": "sig", "n": ... "e": "AQAB", "x5c": ["....."], "x5t": "...", "x5t#S256": "..."}
I see from the documentation that 2.3.16 will support auto discovery: https://doc.dovecot.org/configuration_manual/authentication/oauth2/#openid-d...
Cheers, Vincent
--
All PC's are compatible, some more than others.
TIM San Marino S.p.A. Andrea Gabellini Engineering R&D TIM San Marino S.p.A. - https://www.telecomitalia.sm Via Ventotto Luglio, 212 - Piano -2 47893 - Borgo Maggiore - Republic of San Marino Tel: (+378) 0549 886237 Fax: (+378) 0549 886188
-- Informativa Privacy
Questa email ha per destinatari dei contatti presenti negli archivi di TIM San Marino S.p.A.. Tutte le informazioni vengono trattate e tutelate nel rispetto della normativa vigente sulla protezione dei dati personali (Reg. EU 2016/679). Per richiedere informazioni e/o variazioni e/o la cancellazione dei vostri dati presenti nei nostri archivi potete inviare una email a privacy@telecomitalia.sm.
Avviso di Riservatezza
Il contenuto di questa e-mail e degli eventuali allegati e' strettamente confidenziale e destinato alla/e persona/e a cui e' indirizzato. Se avete ricevuto per errore questa e-mail, vi preghiamo di segnalarcelo immediatamente e di cancellarla dal vostro computer. E' fatto divieto di copiare e divulgare il contenuto di questa e-mail. Ogni utilizzo abusivo delle informazioni qui contenute da parte di persone terze o comunque non indicate nella presente e-mail potra' essere perseguito ai sensi di legge.
participants (2)
-
Andrea Gabellini
-
Vincent Brillault