AppSuite:UCS OIDC SSO with OX App Suite: Difference between revisions

From Open-Xchange
No edit summary
 
Line 11: Line 11:
  https://<Hostname>/univention/saml
  https://<Hostname>/univention/saml


== Configuration ==


=== Setting FQDNs ===
== Migration OX App Suite SSO to Keycloak ==


The following three variables have to be set according to the environment. Multiple or all variables can contain the same FQDN.
The previously provided configuration information is outdated. Please follow the steps outlined in the migration guide available at: https://help.univention.com/t/howto-migrate-ox-sso-to-keycloak/24053/1
 
# FQDN for accessing the SSO - can be found in UCR: ucr get ucs/server/sso/fqdn
SSO_FQDN=ucs-sso.domain.name
# FQDN for accessing the portal
PORTAL_FQDN=portal.domain.name
# FQDN for accessing OX
MAIL_FQDN=mail.domain.name
 
=== Adjusting the provisioning ===
 
The UCS users are provisioned in OX via CLI interfaces and then written to a MySQL database. The database has a <code>imapLogin</code> field that is used by OX to log in to the user's inbox. As default it is set to the user's mail address. If SSO is to be used, it has to be appended with an asterisk and the mail server's master user. For Dovecot this would be <code>*dovecotadmin</code> and looks as follows:
 
meinuser@maildomain.de*dovecotadmin
 
The following two commands have to be executed to let the users be provisioned respectively by the listener:
 
ucr set ox/listener/imaplogin_value='{}*dovecotadmin'
service univention-directory-listener restart
 
==== Adjusting existing users ====
 
For already existing users, the imapLogin field has to be adjusted. See: [https://help.univention.com/t/how-to-change-the-ox-attribute-imaplogin-for-existing-users/14455 How To: Change the OX attribute imaplogin for existing users]
 
=== Installing packages ===
 
univention-app install openid-connect-provider
 
univention-install open-xchange-oidc-ucs open-xchange-authentication-ucs open-xchange-authentication-ucs-common open-xchange-oidc-ucs
 
=== Getting UCR variables into the shell ===
 
As we will need UCR variables for the following steps, we'll get them as shell variables:
 
eval "$(ucr shell)"
 
=== Verify IdP Metadata is available ===
 
The IdP Metadata is reachable via https://ucs-sso.domain.name/.well-known/openid-configuration
 
=== Configure default Signing method for IdP ===
 
As OX does not support the default singing method, it must be changed to a supported value
 
univention-app configure openid-connect-provider --set oidc/konnectd/signing_method=RS256
 
=== Add OX as an RP to the IdP ===
 
client_id=openxchange
client_secret=averylongsecret
FQDN=ox-server-fqdn
redirectURI=https://$FQDN/appsuite/api/oidc/auth
udm oidc/rpservice create --set name=openxchange --position cn=oidc,cn=univention,$(ucr get ldap/base) --set  clientid=$client_id --set clientsecret=$client_secret --set trusted=yes --set applicationtype=web --set  redirectURI=https://$FQDN/appsuite/api/oidc/auth
 
=== Basic configuration in UCR ===
 
We change some configuration parameters so that OX uses SSO. Furthermore we use a master password for Dovecot to enable OX to open the user's inbox without the user's password. *Attention*: If the master password will be changed in the future, it has to be changed in <code>/etc/dovecot/master-users</code> as well as in <code>/etc/dovecot-master.secret</code>.
 
p="$(cat /etc/dovecot/master-users | sed -e 's|.*{PLAIN}||;s|:.*||')"
echo -n "$p" > /etc/dovecot-master.secret
chmod 600 /etc/dovecot-master.secret
ucr set ox/cfg/mailfilter.properties/com.openexchange.mail.filter.masterPassword="@&@/etc/dovecot-master.secret@&@" \
        ox/cfg/mail.properties/com.openexchange.mail.masterPassword="@&@/etc/dovecot-master.secret@&@"
ucr set ox/cfg/mailfilter.properties/com.openexchange.mail.filter.loginType='global' \
        ox/cfg/mailfilter.properties/com.openexchange.mail.filter.passwordSource='global' \
        ox/cfg/mail.properties/com.openexchange.mail.mailServerSource='global' \
        ox/cfg/mail.properties/com.openexchange.mail.passwordSource='global' \
        ox/cfg/sessiond.properties/com.openexchange.sessiond.autologin='false'
 
=== Configuration files for OIDC ===
 
Besides the UCR configuration parameters, we also have to set up two configuration files. Those will contain the FQDNs of SSO, Portal and OX itself in various locations.
 
cat <<__EOT_asconfig__ > /opt/open-xchange/etc/as-config.yml
# Override certain settings
default:
    host: all
    samlLogin: false
    oidcLogin: true
    oidcPath: /oidc
# Override certain settings for certain hosts
#myhost:
#    host: myexchange.myhost.mytld
#    someConfig: some overriding value
__EOT_asconfig__
 
Create properties file
touch /opt/open-xchange/etc/openid.properties
 
Configure openid on OX
Issuer="https://${SSO_FQDN}"
userInfoEndpoint="${Issuer}/konnect/v1/userinfo"
authEndpoint="${Issuer}/signin/v1/identifier/_/authorize"
tokenEndpoint="${Issuer}/konnect/v1/token"
jwkSetEndpoint="${Issuer}/konnect/v1/jwks.json"
 
ucr set set ox/cfg/authplugin.properties/com.openexchange.authentication.ucs.searchFilter='(&(objectClass=oxUserObject)(|(uid=%s)(mailPrimaryAddress=%s)))' \
    ox/cfg/sessiond.properties/com.openexchange.sessiond.autologin=false \
    ox/cfg/openid.properties/com.openexchange.oidc.enabled=true \
    ox/cfg/openid.properties/com.openexchange.oidc.ucs.enabled=true \
    ox/cfg/openid.properties/com.openexchange.oidc.startDefaultBackend=false \
    ox/cfg/openid.properties/com.openexchange.oidc.clientId="$client_id" \
    ox/cfg/openid.properties/com.openexchange.oidc.clientSecret="$client_secret" \
    ox/cfg/openid.properties/com.openexchange.oidc.opIssuer="$Issuer" \
    ox/cfg/openid.properties/com.openexchange.oidc.ucs.userInfoEndpoint="$userInfoEndpoint" \
    ox/cfg/openid.properties/com.openexchange.oidc.opAuthorizationEndpoint="$authEndpoint" \
    ox/cfg/openid.properties/com.openexchange.oidc.opTokenEndpoint="$tokenEndpoint" \
    ox/cfg/openid.properties/com.openexchange.oidc.opJwkSetEndpoint="$jwkSetEndpoint" \
    ox/cfg/openid.properties/com.openexchange.oidc.jwsAlgorithm=RS256 \
    ox/cfg/openid.properties/com.openexchange.oidc.scope="email;openid;profile;offline_access" \
    ox/cfg/openid.properties/com.openexchange.oidc.userLookupClaim=email \
    ox/cfg/openid.properties/com.openexchange.oidc.rpRedirectURIAuth="$redirectURI"
 
=== Adjusting the Dovecot configuration ===
 
Dovecot only allows the access with a master user by OX if the following file has been created:
 
cat <<_EOT_ACL_ >>/etc/dovecot/conf.d/91-acl_user.conf
plugin {
  acl_user = %u
}
_EOT_ACL_
 
=== Re-starting services ===
 
Dovecot and OX have to be re-started now. The commands shouldn't run long; the OX re-start in the background though can take some time, depending on the system.
 
/etc/init.d/dovecot restart
service open-xchange restart

Latest revision as of 07:51, 23 May 2025

Univention Corporate Server OIDC-SSO Configuration with OX App Suite

Preconditions

Before starting the configuration process, it is advisable to test the SAML login to UCS to ensure that it works. Authentication via SAML login works as follows. This is required, because OIDC uses SAML as an authentication base.

https://<Hostname>/univention/saml


Migration OX App Suite SSO to Keycloak

The previously provided configuration information is outdated. Please follow the steps outlined in the migration guide available at: https://help.univention.com/t/howto-migrate-ox-sso-to-keycloak/24053/1