J'essaie de configurer Keycloak en tant qu'IdP (fournisseur d'identité) et Nextcloud en tant que service. Je souhaite configurer Keycloak de manière à présenter une page SSO (authentification unique).
J'utilise un serveur Linux avec un processeur compatible Intel. Quelle est la bonne configuration?
Pour utiliser cette réponse, vous devrez remplacer domain.com
avec un domaine réel que vous possédez. Remplacez également [email protected]
avec votre adresse e-mail de travail.
Il est supposé que Docker et Docker-compose sont installés et exécutés.
En plus de keycloak et nextcloud j'utilise:
J'installe tous les services nécessaires avec docker et docker-compose. C'est ainsi que le docker-compose.yml
ressemble à ça:
version: '2'
nginx-proxy:
image: jwilder/nginx-proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- "/etc/nginx/vhost.d"
- "./proxy-default.conf:/etc/nginx/conf.d/my-proxy.default.conf:ro"
- "/usr/share/nginx/html"
- "/var/run/docker.sock:/tmp/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:ro"
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: unless-stopped
depends_on:
- nginx-proxy
container_name: le-proxy-companion
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:rw"
volumes_from:
- nginx-proxy
keycloak:
image: jboss/keycloak
links:
- keycloak-postgres:postgres
ports:
- 8080:8080
volumes:
- ./keycloak:/opt/jboss/keycloak
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- "PROXY_ADDRESS_FORWARDING=true"
- VIRTUAL_PORT=8080
- VIRTUAL_Host=kc.domain.com
- LETSENCRYPT_Host=kc.domain.com
- [email protected]
keycloak-postgres:
image: postgres
environment:
- POSTGRES_DB=keycloak
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloak
nextcloud:
image: hoellen/nextcloud
environment:
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- CRON_PERIOD=15m
- TZ=Europe/Berlin
- DOMAIN=nc.domain.com
- ADMIN_USER=admin
- ADMIN_PASSWORD=admin
- DB_TYPE=mysql
- DB_NAME=nextcloud
- DB_USER=nextcloud
- DB_PASSWORD=nextcloud
- DB_Host=nc-db
volumes:
- ./nc/nc-data:/data
- ./nc/nc-config:/config
- ./nc/nc-apps:/apps2
- ./nc/nc-themes:/nextcloud/themes
environment:
- VIRTUAL_Host=nc.domain.com
- LETSENCRYPT_Host=nc.domain.com
- [email protected]
nc-db:
image: mariadb
volumes:
- ./nc/nc-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
J'ai placé mes fichiers docker dans un dossier docker
et dans ce dossier un dossier spécifique au projet. Ici keycloak
. Créez-les avec:
mkdir -p ~/docker/keycloak
Créez le docker-compose.yml
- Fichier avec votre éditeur préféré dans ce dossier. Démarrez les services avec:
cd ~/docker/keycloak
docker-compose up -d
Attendez un moment pour laisser les services se télécharger et démarrer. Vérifiez si tout fonctionne avec:
docker-compose ps
Si un service n'est pas en cours d'exécution. Émettez une seconde docker-compose up -d
et vérifiez à nouveau.
Ouvrez un navigateur et accédez à https://kc.domain.com . Cliquez sur Console d'administration. Comme spécifié dans votre docker-compose.yml
, Le nom d'utilisateur et le mot de passe sont admin
.
En haut à gauche de la page, vous devez créer un nouveau Realm. Cliquez sur Add
. Entrez my-realm comme nom. Cliquez sur Save
.
Cliquez sur l'onglet Keys
-. Regardez l'entrée RSA
-. Nous devrons copier le certificat de cette ligne. Cliquez sur Certificate
et copiez-collez le contenu dans un éditeur de texte pour une utilisation ultérieure.
Ouvrez un terminal et lancez:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
Cela crée deux fichiers: private.key
et public.cert
dont nous aurons besoin plus tard pour le service nextcloud.
Ouvrez un navigateur et accédez à https://nc.domain.com . Comme spécifié dans votre docker-compose.yml
, Le nom d'utilisateur et le mot de passe sont admin
.
Vous devez activer le SSO & Saml Authenticate
qui est désactivé par défaut.
Important A partir de là ne fermez pas votre actuel fenêtre du navigateur jusqu'à ce que l'installation soit testée et en cours d'exécution. Si vous fermez le navigateur avant que tout fonctionne, vous ne pourrez probablement plus modifier vos paramètres dans nextcloud. Dans un tel cas, vous devrez arrêter le conteneur nextcloud et nextcloud-db, supprimer leurs dossiers respectifs, les recréer et recommencer à nouveau.
Cliquez sur le symbole d'engrenage en haut à droite, puis sur le + Apps
-signe. Sur la gauche, voyez maintenant une barre de menu avec l'entrée Security
. Cliquez dessus. Vous voyez maintenant toutes les applications liées à la sécurité. Cliquez sur le bouton Activate
sous le SSO & SAML authentication
App.
Cliquez à nouveau sur le symbole d'engrenage en haut à droite et cliquez sur Admin
. Cliquer sur SSO & SAML authentication
.
Utilisez les valeurs suivantes:
public.cert
dans le champ "Certificat X.509"private.key
dans le champ "Clé privée du fournisseur de services".Keys
- de my-realm
. Vous devrez ajouter '----- BEGIN CERTIFICATE -----' devant la clé et '----- END CERTIFICATE -----' à la fin de celle-ci.Download metadata XML
et enregistrez le fichier pour l'étape suivante.Metadata valid
à côté de la Download metadata XML
-Bouton Download metadata XML
-Bouton. Cela génère et envoie un fichier XML. Sauvegarde le.Accédez à nouveau à la console d'administration. Cliquez sur Clients
et en haut à droite cliquez sur le bouton Create
-.
À côté de Importer, cliquez sur le Select File
-Bouton. Sélectionnez le fichier XML que vous avez créé à la dernière étape de Nextcloud.
Changement:
et cliquez sur Save
.
Un nouvel écran vous est présenté. Modifiez les champs suivants:
Save
Sur l'onglet Matters
:
Delete
- Bouton sur le pré-affecté role list
Create
Save
Create
Save
Users
Add users
Save
Credentials
: Reset Password
Change Password
Ouvrez une nouvelle fenêtre de navigateur en mode navigation privée/privée. Par exemple. pour google-chrome, appuyez sur Ctrl-Shift-N
, dans Firefox, appuyez sur Ctrl-Shift-P
. Gardez l'autre fenêtre du navigateur avec la page de configuration de nextcloud ouverte . Sinon, vous pourriez vous enfermer.
Accès https://nc.domain.com avec la fenêtre de navigation privée/privée. La page Nom d'utilisateur/Mot de passe Keycloak s'affiche. Entrez user
comme nom et mot de passe. Vous devriez être accueilli avec l'écran de bienvenue de nextcloud.
Voici une version légèrement mise à jour pour nextcloud 15/16:
Ouvrez un navigateur et accédez à https://kc.domain.com . Cliquez sur Administration Console. Comme spécifié dans votre docker-compose.yml, le nom d'utilisateur et le mot de passe sont admin.
En haut à gauche de la page, vous devez créer un nouveau domaine. Cliquez sur Ajouter. Entrez mon domaine comme nom. Cliquez sur Enregistrer.
Cliquez sur l'onglet Clés. Regardez l'entrée RSA. Nous devrons copier le certificat de cette ligne. Cliquez sur Certificat et copiez-collez le contenu dans un éditeur de texte pour une utilisation ultérieure. Préparer une clé privée et un certificat pour Nextcloud
Ouvrez un terminal et lancez:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
Cela crée deux fichiers: private.key et public.cert dont nous aurons besoin plus tard pour le service nextcloud. Configurer Nextcloud
Ouvrez un navigateur et accédez à https://nc.domain.com . Comme spécifié dans votre docker-compose.yml, le nom d'utilisateur et le mot de passe sont admin.
Vous devez activer l'authentification SSO et Saml qui est désactivée par défaut.
Important À partir d'ici, ne fermez pas la fenêtre de votre navigateur actuel jusqu'à ce que la configuration soit testée et en cours d'exécution. Si vous fermez le navigateur avant que tout fonctionne, vous ne pourrez probablement plus modifier vos paramètres dans nextcloud. Dans un tel cas, vous devrez arrêter le conteneur nextcloud et nextcloud-db, supprimer leurs dossiers respectifs, les recréer et recommencer à nouveau.
Cliquez sur le symbole d'engrenage en haut à droite, puis sur le signe + Applications. Sur la gauche, voyez maintenant une barre de menu avec l'entrée Sécurité. Cliquez dessus. Vous voyez maintenant toutes les applications liées à la sécurité. Cliquez sur le bouton Activer sous l'application d'authentification SSO et SAML.
Cliquez à nouveau sur le symbole d'engrenage en haut à droite et cliquez sur Admin. Cliquez sur Authentification SSO et SAML.
Utilisez les valeurs suivantes:
Attribute to map UID to:username
Enable "Use SAML auth for the Nextcloud desktop clients (requires user re-authentication)"
Copy the content ofpublic.cert into the 'X.509 Certificate'-field
Copy the content ofprivate.key into the 'Private key of Service Provider'-field.
Identifier of the IdP: https://kc.domain.com/auth/realms/my-realm
URL Target of the IdP where the SP will send the Authentication Request Message: https://kc.domain.com/auth/realms/my-realm/protocol/saml
URL Location of IdP where the SP will send the SLO Request: https://kc.domain.com/auth/realms/my-realm/protocol/saml
Public X.509 certificate of the IdP: Copy the certificate from Keycloak from the Keys-tab of my-realm. You will need to add '-----BEGIN CERTIFICATE-----' in front of the key and '-----END CERTIFICATE-----' to the end of it.
In Identity Provider Data:
Attribute, displayname: username
Attribute, email adress: email
Attribute, Quota: nextcloudquota
Click Download metadata XML and save the file for the next step.
Security Settings, enable the following options:
Indicates whether the messages sent by this SP will be signed. [Metadata of the SP will offer this info]
Indicates whether the messages sent by this SP will be signed.
Indicates whether the messages sent by this SP will be signed.
Indicates a requirement for the , and elements received by this SP to be signed.
Indicates a requirement for the elements received by this SP to be signed. [Metadata of the SP will offer this info]
Check there is a Metadata valid beside the Download metadata XML-Button
Click the Download metadata XML-Button. This generate and send a XML file. Save it.
Configurer Keycloak, Client
Accédez à nouveau à la console d'administration. Cliquez sur Clients et en haut à droite sur le bouton Créer.
À côté de Importer, cliquez sur le bouton Sélectionner un fichier. Sélectionnez le fichier XML que vous avez créé à la dernière étape de Nextcloud.
Changement:
Client SAML Endpoint: https://kc.domain.com/auth/realms/my-realm
et cliquez sur Enregistrer.
Un nouvel écran vous est présenté. Modifiez les champs suivants:
Name: Nextcloud
Valid Redirect URIs: https://nc.domain.com/ *
Click Save
On the Tab Matters:
Click Delete-Button on the preassigned role list
Click Create
Name: username
Mapper Type: User Property
Property: username
SAML Attribute Name: username
SAML Attribute NameFormat: Basic
Click Save
Click Create
Name: email
Mapper Type: User Property
Property: email
SAML Attribute Name: email
SAML Attribute NameFormat: Basic
Click Save
Cliquez sur Créer
Name: Roles
Mapper Type: Role List
Role attribute name: Roles
Friendly Name: roles
SAML Attribute NameFormat: Basic
Single Role Attrubute: On
Click Save
Cliquez sur Créer
Name: nextcloudquota
Mapper Type: User Property
Property: nextcloudquota
SAML Attribute Name: nextcloudquota
SAML Attribute NameFormat: Basic
Click Save
Configurer Keycloak, ajouter un utilisateur
On the left side, click on Users
On the top-right, click Add users
Set the following values:
Username: user
Email: [email protected]
Click Save
On the tab Credentials:
New Password: user
Password Confirmation: user
Temporary: Off
Click Reset Password
A Window pops up:
Click Change Password