docs/content/integration/openid-connect/clients/roundcube/index.md
{{% oidc-common %}}
This example makes the following assumptions:
https://roundcube.{{< sitevar name="domain" nojs="example.com" >}}/https://{{< sitevar name="subdomain-authelia" nojs="auth" >}}.{{< sitevar name="domain" nojs="example.com" >}}/roundcubeinsecure_secretSome of the values presented in this guide can automatically be replaced with documentation variables.
{{< sitevar-preferences >}}
The following YAML configuration is an example Authelia client configuration for use with Roundcube which will operate with the application example:
identity_providers:
oidc:
## The other portions of the mandatory OpenID Connect 1.0 configuration go here.
## See: https://www.authelia.com/c/oidc
clients:
- client_id: 'roundcube'
client_name: 'Roundcube'
client_secret: '$pbkdf2-sha512$310000$c8p78n7pUMln0jzvd4aK4Q$JNRBzwAo0ek5qKn50cFzzvE9RXV88h1wJn5KGiHrD0YKtZaR/nCb2CJPOsKaPK0hjf.9yHxzQGZziziccp6Yng' # The digest of 'insecure_secret'.
public: false
authorization_policy: 'two_factor'
require_pkce: false
pkce_challenge_method: ''
redirect_uris:
- 'https://roundcube.{{< sitevar name="domain" nojs="example.com" >}}/oauth/callback/'
scopes:
- 'openid'
- 'profile'
- 'email'
response_types:
- 'code'
grant_types:
- 'authorization_code'
access_token_signed_response_alg: 'none'
userinfo_signed_response_alg: 'none'
token_endpoint_auth_method: 'client_secret_post'
To configure Roundcube OAuth2 there is one method, using the Configuration File.
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
Generally the configuration file is named /etc/roundcube/config.inc.php.
{{< /callout >}}
To configure Roundcube OAuth2 to utilize Authelia as an OpenID Connect 1.0 Provider, use the following configuration:
$config['use_https'] = true;
$config['oauth_provider'] = 'generic';
$config['oauth_provider_name'] = 'Authelia OIDC';
$config['oauth_client_id'] = 'roundcube';
$config['oauth_client_secret'] = 'insecure_secret';
$config['oauth_auth_uri'] = 'https://{{< sitevar name="subdomain-authelia" nojs="auth" >}}.{{< sitevar name="domain" nojs="example.com" >}}/api/oidc/authorization';
$config['oauth_token_uri'] = 'https://{{< sitevar name="subdomain-authelia" nojs="auth" >}}.{{< sitevar name="domain" nojs="example.com" >}}/api/oidc/token';
$config['oauth_identity_uri'] = 'https://{{< sitevar name="subdomain-authelia" nojs="auth" >}}.{{< sitevar name="domain" nojs="example.com" >}}/api/oidc/userinfo';
$config['oauth_identity_fields'] = ['email'];
$config['oauth_scope'] = 'email openid profile';
// Optionally, skip Roundcube's login page
// $config['oauth_login_redirect'] = true;
{{< callout context="caution" title="Important Note" icon="outline/alert-triangle" >}}
Roundcube's redirect URI is not configurable, but is dynamically built with bits coming from the
FCGI environment: <scheme>://<fqdn>[:<port>]/.... Specifically, the FQDN comes from the HTTP_HOST header. With
Authelia, non-localhost HTTP redirection is not allowed, thus you might want to force HTTPS via Roundcube's conf flag
use_https. However, the redirection breaks when the upstream application is listening on a explicit port, because the
resulting redirect URI would be something like https://<fqdn>:<port>/.... Thus, to obtain the correct redirect URI
https://<fqdn>/..., your reverse proxy's fastcgi parameter SERVER_PORT should be unset.
{{< /callout >}}
IMAP and SMTP backend configuration:
smtp_host and smtp_conn_options!{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
Generally the configuration file is named /etc/dovecot/dovecot.conf or is one of the ancillary files in
/etc/dovecot/conf.d/.
{{< /callout >}}
auth_mechanisms = $auth_mechanisms oauthbearer xoauth2
passdb {
args = /etc/dovecot/dovecot-oauth2.conf.ext
driver = oauth2
mechanisms = xoauth2 oauthbearer
}
# Optional for Postfix SASL on smtpd/submission
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
}
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
Generally the configuration file is named /etc/dovecot/dovecot-oauth2.conf.ext.
{{< /callout >}}
introspection_mode = post
introspection_url = https://roundcube:insecure_secret@{{< sitevar name="subdomain-authelia" nojs="auth" >}}.{{< sitevar name="domain" nojs="example.com" >}}/api/oidc/introspection
username_attribute = username
{{< callout context="caution" title="Important Note" icon="outline/alert-triangle" >}}
The client ID and secret must figure as credentials in
the introspection_url.
{{< /callout >}}
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
Generally the configuration file is named /etc/postfix/main.cf.
{{< /callout >}}
Even though no authentication would be required when your Postfix instance is on the same host, Roundcube OAuth2 enforces 'XOAUTH2' auth type plus credentials and gives up the SMTP + SSL/TLS handshaking as no auth options would be offered from Postfix. Thus, Postfix must be configured with (Dovecot-type) SASL on port 25 (smtpd) or 587 (submission), with the following minimum set of options:
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot