Joplin Server
Joplin es una aplicación de toma de notas de código abierto, y Joplin Server es su servidor de sincronización autoalojado. Desde la versión 3.4.1, Joplin Server puede autenticar a los usuarios a través de un proveedor de identidad (IdP) SAML 2.0. Con Casdoor como IdP, los usuarios inician sesión en Joplin Server, y en las aplicaciones de Joplin que se sincronizan con él, mediante su cuenta de Casdoor.
Joplin Server verifica la respuesta SAML con samlify y xml-crypto. xml-crypto no admite la canonicalización XML 1.1, que Casdoor utiliza por defecto al firmar, por lo que la aplicación en Casdoor debe tener Enable SAML C14N10 activado. Utilice la última versión de Casdoor: las versiones anteriores firman dichas respuestas de una manera que Joplin Server rechaza, generando FAILED_TO_VERIFY_SIGNATURE o un error de esquema XML.
Los ejemplos utilizan https://joplin.example.com para Joplin Server y https://door.example.com para Casdoor.
Crear la aplicación en Casdoor
-
En la consola de administración de Casdoor, abra la organización de sus usuarios y añada una aplicación, o abra una existente.
-
Añada el ID de entidad de Joplin Server y su URL de Servicio de Consumidor de Aserciones (ACS) a Redirect URLs. El ID de entidad es el
entityIDen el archivo de proveedor de servicios (SP) que usted escribe abajo,Joplinen el ejemplo. La URL ACS es<APP_BASE_URL>/api/saml:Joplin
https://joplin.example.com/api/saml -
En la pestaña SAML:
-
Active Enable SAML C14N10 y deje vacío SAML C14N10 prefix.
-
Active Enable SAML POST binding. Joplin Server envía su solicitud a Casdoor mediante el enlace HTTP-POST, por lo que los metadatos deben listar el endpoint HTTP-POST de Casdoor.
-
Añada dos filas a SAML attributes. Joplin Server solo lee estos dos atributos, y los nombres distinguen entre mayúsculas y minúsculas: los atributos
EmailyDisplayNameque Casdoor envía por defecto no cuentan.Name Name format Value emailBasic $user.emaildisplayNameBasic $user.displayNameCada usuario necesita una dirección de correo electrónico en Casdoor. Joplin Server identifica al usuario mediante ella.
-
-
Guarde y haga clic en Copy SAML metadata URL. Con Enable SAML POST binding activado, la URL termina en
enablePostBinding=true:https://door.example.com/api/saml/metadata?application=admin/<application-name>&enablePostBinding=true -
Abra la URL y guarde el XML como
idp.xml. Joplin Server lee los metadatos del IdP desde un archivo, no desde una URL.
Preparar Joplin Server
-
Escriba el archivo SP
sp.xml. EstablezcaentityIDen la ID de entidad que agregó a Redirect URLs, yLocationen la URL ACS:<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="Joplin">
<md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://joplin.example.com/api/saml" index="1" />
</md:SPSSODescriptor>
</md:EntityDescriptor> -
Coloque
idp.xmlysp.xmldonde Joplin Server pueda leerlos. Con Docker, monte un directorio, por ejemplo./saml:/saml:roendocker-compose.yml. -
Configure las variables de entorno de Joplin Server, por ejemplo en su archivo
.env:APP_BASE_URL=https://joplin.example.com
API_BASE_URL=https://joplin.example.com
SAML_ENABLED=true
SAML_IDP_CONFIG_FILE=/saml/idp.xml
SAML_SP_CONFIG_FILE=/saml/sp.xml
SAML_ORGANIZATION_DISPLAY_NAME=Casdoor
DELETE_EXPIRED_SESSIONS_SCHEDULE=Variable Description APP_BASE_URL,API_BASE_URLSAML needs both set to the same URL. SAML_ENABLEDTurns on SAML sign-in. SAML_IDP_CONFIG_FILEThe path of the IdP metadata from Casdoor. SAML_SP_CONFIG_FILEThe path of the SP file. SAML_ORGANIZATION_DISPLAY_NAMEOptional. The name that the sign-in page shows above the SAML button. DELETE_EXPIRED_SESSIONS_SCHEDULEJoplin Server limpia las sesiones cada 6 horas de forma predeterminada, y los usuarios de SAML deben iniciar sesión manualmente después. Un valor vacío desactiva esta función. Para permitir solo el inicio de sesión con SAML, también configure
LOCAL_AUTH_ENABLED=false. -
Reinicie Joplin Server.
Verificar el resultado
- Abra
https://joplin.example.com/loginen una ventana privada del navegador y haga clic en Login using your organisation account. - Inicie sesión en Casdoor. Joplin Server abre su página principal con el usuario de Casdoor conectado. Un usuario que aún no existe en Joplin Server se crea en este primer inicio de sesión, con el correo electrónico y el nombre para mostrar de Casdoor.
- En una aplicación Joplin, seleccione Joplin Server (SAML) como destino de sincronización e introduzca
https://joplin.example.com. La aplicación abre el inicio de sesión en el navegador. Después de iniciar sesión en Casdoor, Joplin Server muestra un código, que usted introduce en la aplicación para comenzar la sincronización.
Solución de problemas
| Symptom | Cause and fix |
|---|---|
Joplin Server logs FAILED_TO_VERIFY_SIGNATURE: POST /api/saml | Update Casdoor to the latest version. If it persists, download the metadata again: Joplin Server must have the certificate of the application's current Cert. |
Joplin Server logs canonicalization algorithm 'http://www.w3.org/2006/12/xml-c14n11' is not supported | Turn on Enable SAML C14N10 on the application. |
Joplin Server logs ERR_EXCEPTION_VALIDATE_XML, about xs:string without a namespace declaration | Update Casdoor to the latest version. Older versions drop the xs namespace from the response when they sign it. |
email must be a string or displayName must be a string | Add the email and displayName rows to SAML attributes, with these exact names, and check that Disable SAML attributes is off. |
Could not login using email "..." | Joplin Server already has a local account with a password for this email, and doesn't let SAML sign in to it. Delete or rename the local account in Joplin Server. |
The browser opens a Joplin Server URL that ends with [object Object] | The IdP metadata has no HTTP-POST endpoint. Turn on Enable SAML POST binding, and download the metadata again with enablePostBinding=true. |
Casdoor shows Issuer URI: Joplin doesn't exist in the allowed Redirect URI list | Add the entityID of sp.xml to Redirect URLs. |
Casdoor shows AssertionConsumerServiceURL: ... doesn't match the SAML reply URL or the allowed Redirect URI list | Add <APP_BASE_URL>/api/saml to Redirect URLs. |
Vea también
- Soporte de SAML de Joplin Server en la documentación de Joplin
- Usar Casdoor como proveedor de identidad SAML