Ya no necesitas investigar más por todo internet ya que has llegado al sitio perfecto, poseemos la respuesta que quieres sin complicarte.
Solución:
Requisito previo:
Para usar esta respuesta, deberá reemplazar domain.com
con un real dominio tu propio. Además, reemplace [email protected]
con su dirección de correo electrónico de trabajo.
Se supone que tiene Docker y Docker-compose instalados y en ejecución.
Configura tus servicios con Docker
Además de keycloak y nextcloud utilizo:
- nginx como un proxy inverso
- letencyrpt para generar los certificados SSL para los subdominios.
Estoy configurando todos los servicios necesarios con docker y docker-compose. Así es como el docker-compose.yml
Se ve como esto:
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
Pongo mis archivos de la ventana acoplable en una carpeta docker
y dentro de esta carpeta una carpeta específica del proyecto. Aquí keycloak
. Créelos con:
mkdir -p ~/docker/keycloak
Crea el docker-compose.yml
-Archivo con su editor preferido en esta carpeta. Inicie los servicios con:
cd ~/docker/keycloak
docker-compose up -d
Espere un momento para que los servicios se descarguen y comiencen. Compruebe si todo está funcionando con:
docker-compose ps
Si un servicio no se está ejecutando. Emita un segundo docker-compose up -d
y vuelva a comprobar.
Configurar Keycloak, agregar un nuevo reino
Abra un navegador y vaya a https://kc.domain.com. Haga clic en Consola de administración. Como se especifica en su docker-compose.yml
, El nombre de usuario y la contraseña son admin
.
En la parte superior izquierda de la página, debe crear un nuevo Reino. Hacer clic Add
. Ingresar mi-reino como el nombre. Hacer clic Save
.
Clickea en el Keys
-pestaña. Mira el RSA
-entrada. Necesitaremos copiar el Certificado de esa línea. Haga clic en Certificate
y copie y pegue el contenido en un editor de texto para su uso posterior.
Prepare una clave privada y un certificado para Nextcloud
Abra una terminal y emita:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
Esto crea dos archivos: private.key
y public.cert
que necesitaremos más adelante para el servicio nextcloud.
Configurar Nextcloud
Abra un navegador y vaya a https://nc.domain.com. Como se especifica en su docker-compose.yml
, El nombre de usuario y la contraseña son admin
.
Necesita activar el SSO & Saml Authenticate
que está deshabilitado por defecto.
Importante A partir de aquí no cierres tu Actual ventana del navegador hasta que se pruebe la configuración y se ejecute. Si cierra el navegador antes de que todo funcione, probablemente ya no podrá cambiar su configuración en nextcloud. En tal caso, deberá detener el contenedor nextcloud- y nextcloud-db-container, eliminar sus carpetas respectivas, volver a crearlas y comenzar de nuevo.
Haga clic en el símbolo de engranaje superior derecho y luego en el + Apps
-firmar. A la izquierda ahora ve una barra de menú con la entrada Security
. Pinchalo. Ahora verá todas las aplicaciones relacionadas con la seguridad. Clickea en el Activate
botón debajo del SSO & SAML authentication
App.
Haga clic en el símbolo de engranaje superior derecho nuevamente y haga clic en Admin
. Haga clic en SSO & SAML authentication
.
Utilice los siguientes valores:
- Atributo para mapear UID a: nombre de usuario
- Habilite “Usar autenticación SAML para los clientes de escritorio de Nextcloud (requiere una nueva autenticación del usuario)”
- Copia el contenido de
public.cert
en el campo ‘Certificado X.509’ - Copia el contenido de
private.key
en el campo ‘Clave privada del proveedor de servicios’. - Identificador del IdP: https://kc.domain.com/auth/realms/my-realm
- Destino de URL del IdP donde el SP enviará el mensaje de solicitud de autenticación: https://kc.domain.com/auth/realms/my-realm/protocol/saml
- Ubicación URL del IdP donde el SP enviará la solicitud de SLO: https://kc.domain.com/auth/realms/my-realm/protocol/saml
- Certificado público X.509 del IdP: copie el certificado de Keycloak del
Keys
-pestaña demy-realm
. Deberá agregar ‘—– BEGIN CERTIFICATE —–‘ delante de la clave y ‘—– END CERTIFICATE —–‘ al final. - Datos del proveedor en servicio:
- Atributo, nombre para mostrar: nombre de usuario
- Atributo, dirección de correo electrónico: Email
Hacer clicDownload metadata XML
y guarde el archivo para el siguiente paso.
- Configuraciones de seguridad, habilitar las siguientes opciones:
- Indica si se firmarán los mensajes samlp: AuthnRequest enviados por este SP. [Metadata of the SP will offer this info]
- Indica si se firmarán los mensajes samlp: logoutRequest enviados por este SP.
- Indica si se firmarán los mensajes samlp: logoutResponse enviados por este SP.
- Indica un requisito para que se firmen los elementos samlp: Response, samlp: LogoutRequest y samlp: LogoutResponse recibidos por este SP.
- Indica un requisito para la firma de los elementos saml: Assertion recibidos por este SP. [Metadata of the SP will offer this info]
- Compruebe que hay un
Metadata valid
al lado deDownload metadata XML
-Botón
- Haga clic en el
Download metadata XML
-Botón. Esto genera y envía un archivo XML. Guárdalo.
Configurar Keycloak, Cliente
Vuelva a acceder a la Consola del administrador. Haga clic en Clients
y en la parte superior derecha, haga clic en el Create
-Botón.
Junto a Importar, haga clic en el Select File
-Botón. Seleccione el archivo XML que ha creado en el último paso en Nextcloud.
Cambio:
- Punto final SAML del cliente: https://kc.domain.com/auth/realms/my-realm
y haga clic en Save
.
Se le presenta una nueva pantalla. Cambie los siguientes campos:
- Nombre: Nextcloud
- URI de redireccionamiento válidos: https://nc.domain.com/ *
- Hacer clic
Save
En la pestaña Matters
:
- Hacer clic
Delete
-Botón en el preasignadorole list
- Hacer clic
Create
- Nombre: nombre de usuario
- Tipo de mapeador: Propiedad del usuario
- Propiedad: nombre de usuario
- Nombre de atributo SAML: nombre de usuario
- Nombre del atributo SAML Formato: Básico
- Hacer clic
Save
- Hacer clic
Create
- Nombre: Email
- Tipo de mapeador: Propiedad del usuario
- Propiedad: Email
- Nombre de atributo SAML: Email
- Nombre del atributo SAML Formato: Básico
- Hacer clic
Save
- Hacer clic
Create
- Nombre: Roles
- Tipo de mapeador: Lista de roles
- Nombre del atributo de función: Roles
- Nombre amigable: roles
- Nombre del atributo SAML Formato: Básico
- Atributo de rol único: activado
- Hacer clic
Save
Configurar Keycloak, agregar usuario
- En el lado izquierdo, haga clic en
Users
- En la esquina superior derecha, haz clic en
Add users
- Establezca los siguientes valores:
- Nombre de usuario: usuario
- Correo electrónico: [email protected]
- Hacer clic
Save
- En la pestaña
Credentials
:- Nueva contraseña: usuario
- Confirmación de contraseña: usuario
- Temporal: Apagado
- Hacer clic
Reset Password
- Aparece una ventana:
- Hacer clic
Change Password
- Hacer clic
Prueba de funcionamiento
Abra una nueva ventana del navegador en modo incógnito / privado. P.ej. para prensa de google-chrome Ctrl-Shift-N
, en Firefox presione Ctrl-Shift-P
. Guardar la otra ventana del navegador con la página de configuración de nextcloud abierto. De lo contrario, podría encerrarse.
Acceda a https://nc.domain.com con la ventana de incógnito / navegador privado. Se le presenta la página de nombre de usuario / contraseña de keycloak. Ingresar user
como nombre y contraseña. Debería ser recibido con la pantalla de bienvenida de nextcloud.
Reconocimiento
- Esta guía no hubiera sido posible sin la maravillosa entrada de blog http://int128.hatenablog.com/entry/2018/01/16/194048. Lo leí con el traductor de google en inglés.
- Gracias también a RMM. Su entrada en la wiki me permitió crear claves correctas para nextcloud y habilitar la firma de mensajes, mejorando así esta respuesta.
Aquí hay una versión ligeramente actualizada para nextcloud 15/16:
Abra un navegador y vaya a https://kc.domain.com. Haga clic en Consola de administración. Como se especifica en su docker-compose.yml, el nombre de usuario y la contraseña son admin.
En la parte superior izquierda de la página, debe crear un nuevo Reino. Haga clic en Agregar. Ingrese mi-reino como nombre. Clic en Guardar.
Haga clic en la pestaña Teclas. Mira la entrada RSA. Necesitaremos copiar el Certificado de esa línea. Haga clic en Certificado y copie y pegue el contenido en un editor de texto para su uso posterior. Prepare una clave privada y un certificado para Nextcloud
Abra una terminal y emita:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
Esto crea dos archivos: private.key y public.cert que necesitaremos más adelante para el servicio nextcloud. Configurar Nextcloud
Abra un navegador y vaya a https://nc.domain.com. Como se especifica en su docker-compose.yml, el nombre de usuario y la contraseña son admin.
Debe activar SSO y Saml Authenticate, que está deshabilitado de forma predeterminada.
Importante A partir de aquí, no cierre la ventana actual del navegador hasta que la configuración esté probada y en ejecución. Si cierra el navegador antes de que todo funcione, probablemente ya no podrá cambiar su configuración en nextcloud. En tal caso, deberá detener el contenedor nextcloud- y nextcloud-db-container, eliminar sus carpetas respectivas, volver a crearlas y comenzar de nuevo.
Haga clic en el símbolo de engranaje superior derecho y luego en el signo + Aplicaciones. A la izquierda, ahora verá una barra de menú con la entrada Seguridad. Pinchalo. Ahora verá todas las aplicaciones relacionadas con la seguridad. Haga clic en el botón Activar debajo de la aplicación de autenticación SSO y SAML.
Haga clic en el símbolo de engranaje superior derecho nuevamente y haga clic en Administrador. Haga clic en autenticación SSO y SAML.
Utilice los siguientes valores:
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.
Configurar Keycloak, Cliente
Acceda de nuevo a la Consola del administrador. Haga clic en Clientes y en la parte superior derecha haga clic en el botón Crear.
Junto a Importar, haga clic en el botón Seleccionar archivo. Seleccione el archivo XML que ha creado en el último paso en Nextcloud.
Cambio:
Client SAML Endpoint: https://kc.domain.com/auth/realms/my-realm
y haga clic en Guardar.
Se le presenta una nueva pantalla. Cambie los siguientes campos:
Name: Nextcloud
Valid Redirect URIs: https://nc.domain.com/ *
Click Save
En la pestaña Asuntos:
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
Haga clic en Crear
Name: Roles
Mapper Type: Role List
Role attribute name: Roles
Friendly Name: roles
SAML Attribute NameFormat: Basic
Single Role Attrubute: On
Click Save
Haga clic en Crear
Name: nextcloudquota
Mapper Type: User Property
Property: nextcloudquota
SAML Attribute Name: nextcloudquota
SAML Attribute NameFormat: Basic
Click Save
Configurar Keycloak, agregar usuario
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