From 0dfdd1a9f55b2d31da36eabfeef211b52ea98235 Mon Sep 17 00:00:00 2001 From: Kees van Vloten Date: Fri, 21 Feb 2025 15:46:40 +0100 Subject: [PATCH] Documentation for SSO integration with Keycloak --- .../installation/sso-keycloak-using-OIDC.md | 209 ++++++++++++++++++ documentation/img/keycloak-client.png | Bin 0 -> 44379 bytes 2 files changed, 209 insertions(+) create mode 100644 documentation/EN/installation/sso-keycloak-using-OIDC.md create mode 100644 documentation/img/keycloak-client.png diff --git a/documentation/EN/installation/sso-keycloak-using-OIDC.md b/documentation/EN/installation/sso-keycloak-using-OIDC.md new file mode 100644 index 000000000..593af8676 --- /dev/null +++ b/documentation/EN/installation/sso-keycloak-using-OIDC.md @@ -0,0 +1,209 @@ +# Integration with Keycloak + +Keycloak is an open source Web Single Sign On (WebSSO) supporting multiple +protocoles, like OIDC and SAML. In this case, we are going to use OIDC. + + +## Resume + + +Deployment of Keycloak is out of scope of this document, you can find a +lot of documentation about Keycloak installation here: https://www.keycloak.org/guides#getting-started. +We assume you already have a running instance of Keycloak and LinShare. + +For the whole guide, I will assume you are using my favorite Linux distribution, aka Debian. + +According to our installation guide, LinShare is deployed on http://linshare-user.local. + + +/!\ there is two ways to use OIDC: + * You can only delegate the authentication to OIDC but for the provisioning + you will still rely on user providers (LDAP or TWAKE) to create/provision + users. + * You can also decide to delegate the provisioning to OIDC (full delegation). + To do that, you need to use the OIDC user provider. Users will be created at + first connection or when they are added to a sharing or a worgroups. User's + profile will be created using OIDC claims as source of information. See Step 4. + + +## Step 1: Keycloak configuration. + +You need to add a new `Client Scope` and a new `Client`. + +### Client scope + +Go to `Client Scopes`, click `Create client scope` +- `Name`: `linshare` +- `Description`: `Linshare claims` + +Go to the TAB `Mappers` +- Click `Add mapper`, `By configuration` +- From the list choose `User Property` +- `Name`: `first_name` +- `Property`: `firstName` +- Click `Save` + +- Click `Add mapper`, `By configuration` +- From the list choose `User Property` +- `Name`: `last_name` +- `Property`: `lastName` +- Click `Save` + +### Client + +Go to `Client`, click `Create client` +- `Name`: `linshare` +- `Description`: `Linshare` +- `Root URL`: url of linshare +- `Valid redirect URIs`: `/*` and `/` +- `Web origins`: `+` +- `Client authentication`: `Off` + +![Keycloak client](../../img/keycloak-client.png) + +Go to the TAB `Client scopes` + +- Click `Add client scope` +- Select `email` and `linshare` +- Click `Add` + +Check the claims for the client + +- Click on `Evaluate` +- `Users`: select a user +- Click on `Generated access token` +- Check the content of the token + +Go to the TAB `Settings` +- Click `Save` + +Since we have put the `Root URL` for the Ui-user in the client, create another client for Ui-admin with its `Root URL`. + + +## Step 2: LinShare backend configuration + +### Enable OIDC support in LinShare. + + +You need to edit `/etc/linshare/linshare.properties` and add/uncomment the following keys: + +``` +## OIDC Parameters +oidc.on=true +oidc.issuerUri=http://auth.linshare.local +oidc.client.id=linshare +oidc.client.secret=linshare +# oidc.access.claim.value=true +``` + + +### Restart +Finally just restart Tomcat : `systemctl restart tomcat`. + + +## Step 3: LinShare frontend configuration + +## Step 3.1: LinShare frontend configuration : Ui-User + +You need to edit the configuration file linshare-ui-user/config/config.js +and add the following keys: + +``` + ... + homePage: 'home', + ... + oidcSetting: { + authority: 'http://auth.linshare.local', + oidcToken: 'Oidc-Jwt', + client_id: 'linshare', + client_secret: 'linshare', + scope: 'openid email linshare', + loadUserInfo: false + }, + oidcEnabled: true, + oidcForceRedirection: false, +``` + +## Step 3.2: LinShare frontend configuration : Ui-Admin + +You need to edit the configuration file linshare-ui-admin/new/config/config.js +and add the following keys: + +``` + ... + homePage: 'home', + ... + oidcSetting: { + authority: 'http://auth.linshare.local', + oidcToken: 'Oidc-Jwt', + client_id: 'linshare', + client_secret: 'linshare', + scope: 'openid email linshare', + }, + oidcEnabled: true, +``` + +## Step 4: Optional OIDC claims + +Above description configures just the minimum set of claims, however there are number of optional claims. + +Optional claims can be added to client scope `linshare.` in Keycloak. + +### Domain discriminator + +Allows LinShare to create users for a domain when an user authenticates with OIDC. +The user will be created if a value in the claim `domain_discriminator` matches with the value in the Ui-admin + +- Name: `domain_discriminator` +- Type: list of strings, e.g. `["domain-1"]` + +Linshare configuration: + +- In Ui-admin goto: `Configuration`, `Select domain`, select a domain, `Providers`, `User providers`, put one of stings in `Associated domain identifier` + +### External uid + +The value will store its value in the user profile upon first connection. +In successive OIDC authentication attempts the store value will be compared with the claim value in order to be sure it is the same user. + +- Name: `external_uid` +- Type: string + +Linshare configuration: + +- In Ui-admin goto: `Configuration`, `Select domain`, select a domain, `Providers`, `User providers`, tag `Check external user identifier` + +### Linshare access + +Determines whether the user is permitted to login in Linshare. + +- Name: `linshare_access` +- Type: boolean + +Linshare configuration: + +- In `/etc/linshare/linshare.properties` add `oidc.access.claim.value=true` +- In Ui-admin goto: `Configuration`, `Select domain`, select a domain, `Providers`, `User providers`, tag `Use access claim` + +### Linshare role + +The value will be used as default role value when creating the profile at first connection. + +- Name: `linshare_role` +- Type: string, one of existing locales: `ADMIN`, `SIMPLE` + +Linshare configuration: + +- In Ui-admin goto: `Configuration`, `Select domain`, select a domain, `Providers`, `User providers`, tag `Use role claim` + + +### Linshare locale + +The value will be used as default locale value when creating the user profile at first connection. + +- Name: `linshare_locale` +- Type: string, one of existing locales: `ENGLISH`, `FRENCH`, `RUSSIAN` + +Linshare configuration: + +- In Ui-admin goto: `Configuration`, `Select domain`, select a domain, `Providers`, `User providers`, tag `Use email locale claim` diff --git a/documentation/img/keycloak-client.png b/documentation/img/keycloak-client.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff6382d1ac156c839fd23747914f9eb751e74bb GIT binary patch literal 44379 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 I3}+YhZ-*qr%>V!Z literal 0 HcmV?d00001