One place for hosting & domains

      SimpleSAMLphp

      Cómo instalar y configurar SimpleSAMLphp para la autenticación SAML en Ubuntu 18.04


      Introducción

      SimpleSAMLphp es una aplicación de autenticación PHP de código abierto que ofrece soporte para SAML 2.0 como Proveedor de servicios (SP) o Proveedor de identidad (IdP).

      SAML (Security Assertion Markup Language) es un mecanismo de comunicación seguro basado en XML para intercambiar datos de autenticación y autorización entre organizaciones y aplicaciones. Se utiliza a menudo para implementar SSO web (autenticación única). Esto elimina la necesidad de mantener múltiples credenciales de autenticación en múltiples organizaciones. O dicho de otro modo, puede usar una identidad, como un nombre de usuario y contraseña, para acceder a múltiples aplicaciones.

      Una instancia de SimpleSAMLphp se conecta con una fuente de autenticación, que es un proveedor de identidad como LDAP o una base de datos de usuarios. Autentica a los usuarios contra esta fuente de autenticación antes de conceder acceso a los recursos disponibles de los Proveedores de servicios vinculados.

      A través de este tutorial, instalará SimpleSamlPHP y lo configurará para que utilice una base de datos de MySQL como fuente de autenticación. Almacenará los usuarios y las contraseñas cifradas en la base de datos MySQL y probará que puede utilizar esos usuarios para iniciar sesión.

      Requisitos previos

      Paso 1: Descargar e instalar SimpleSAMLphp

      Es necesario realizar un par de pasos para instalar SimpleSAMLphp. Tenemos que descargar el software en sí mismo así como algunos componentes y requisitos previos adicionales. También deberemos realizar algunos cambios en la configuración de nuestro host virtual.

      Inicie sesión en su servidor si no lo ha hecho aún.

      Descargue SimpleSAMLphp desde el sitio web del proyecto. SimpleSAMLphp siempre enlaza la última versión estable de su software a la misma URL. Esto significa que podemos obtener la última versión escribiendo esto:

      • wget https://simplesamlphp.org/download?latest

      Con esto, se descargará un archivo comprimido llamado download?latest que contiene SimpleSAMLphp. Extraiga el contenido con el comando tar:

      Los archivos se extraerán a un directorio nuevo con la etiqueta simplesamlphp-1.x.y​​​, donde x.y es el número de la versión actual. Utilice el comando ls para identificar el archivo:

      Verá el nombre del archivo:

      Ouptut

      simplesamlphp-1.18.5

      Ahora, copie el contenido del directorio a /var/simplesamlphp usando el comando cp. Asegúrese de sustituir el número de versión con la versión que tenga:

      • sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

      El conmutador -a garantiza que los permisos del archivo se copien junto con los archivos y carpetas. El punto al final del archivo de origen garantiza que todo en el directorio de origen, incluyendo los archivos ocultos, se copian al directorio de destino.

      Nota: Si necesita instalar los archivos en una ubicación diferente, deberá actualizar varios archivos. Consulte la documentación de instalación oficial de SimpleSAMLphp para ver los detalles específicos.

      SimpleSAMLphp necesita algunos paquetes de software adicionales, como las extensiones de PHP para trabajar con XML, cadenas de bytes múltiples, curl y LDAP. También necesita memcached. Instale estos usando su administrador de paquetes.

      Primero, actualice su lista de paquetes:

      A continuación, instale los paquetes:

      • sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

      Una vez que se complete la instalación, reinicie Apache para activar las nuevas extensiones de PHP:

      • sudo systemctl restart apache2

      Ahora que SimpleSAMLphp está instalado, configuraremos Apache para presentar los archivos.

      Paso 2: Configurar Apache para presentar SimpleSAMLphp

      Ya ha configurado un dominio y apuntado a este servidor, y ha configurado un host virtual para que funcione con HTTPS protegiendo Apache con Let´s Encrypt. Usaremos eso para presentar SimpleSAMLphp.

      El único directorio de SimpleSAMLphp que debe estar visible para la web es /var/simplesamlphp/www. Para exponerlo a la Web, edite el archivo de configuración de host virtual SSL de Apache para su dominio.

      Si su archivo de configuración de host virtual se llama your_domain.conf, Let´s Encrypt creó un nuevo archivo de configuración llamado your_domain-le-ssl.conf que gestiona las solicitudes HTTPS para su dominio. Abra el archivo de configuración SSL con el siguiente comando para editar el archivo. Asegúrese de sustituir your_domain por el nombre real del archivo:

      • sudo nano /etc/apache2/sites-available/your_domain-le-ssl.conf

      El archivo debería tener el siguiente aspecto, pero el archivo real puede tener comentarios más descriptivos:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
              ServerName your_domain
      
              ServerAdmin webmaster@localhost
              DocumentRoot /var/www/html
      
              ErrorLog ${APACHE_LOG_DIR}/error.log
              CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      </VirtualHost>
      </IfModule>
      

      La directiva ServerName aquí define el dominio base que debería coincidir con la definición de este host virtual. Este debería ser el nombre de dominio para el que configuró un certificado SSL en la sección de requisitos previos. Vamos a añadir una directiva Alias que proporciona control a SimpleSAMLphp para todas las URLs que coinciden con https://your_domain/simplesaml/*. Haga esto añadiendo la siguiente línea al archivo de configuración:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
      
        Alias /simplesaml /var/simplesamlphp/www
      
      ...
      

      Esto significa que domain_name/simplesaml/* se dirigirán al directorio /var/simplesamlphp/www que proporciona el control a SimpleSAMLphp.

      A continuación, concederemos acceso al directorio /var/simplesamlphp/www especificando un control de acceso Require all granted para el mismo. Esto hará que el servicio SimpleSAMLphp sea accesible en la Web. Haga esto añadiendo lo siguiente al archivo de configuración:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        Alias /simplesaml /var/simplesamlphp/www
        <Directory /var/simplesamlphp/www/>
            Require all granted
        </Directory>
      ...
      

      Guarde y cierre el archivo. Reinicie Apache para implementar los cambios:

      • sudo systemctl restart apache2

      Ahora que Apache está configurado para presentar archivos de aplicación, vamos a configurar SimpleSAMLphp.

      Paso 3: Configurar SimpleSAMLphp

      A continuación, debemos realizar varios cambios en la configuración principal de SimpleSAMLphp ubicada en /var/simplesamlphp/config/config.php. Abra el archivo en su editor:

      • nano /var/simplesamlphp/config/config.php

      Configure la contraseña del administrador buscando la línea 'auth.adminpassword' y sustituyendo el valor predeterminado de 123 por una contraseña más segura. Esta contraseña le permite acceder a algunas de las páginas en su interfaz web de la instalación de SimpleSAMLphp:

      /var/simplesamlphp/config/config.php

      . . .
      'auth.adminpassword'        => 'your_admin_password',
      . . .
      

      A continuación, establezca un salt secreto, que debería ser una cadena de caracteres generada aleatoriamente. Algunas partes de SimpleSAMLphp utilizan este valor sal para crear hashes que ofrezcan seguridad a nivel criptográfico. Obtendrá errores si el salt no se cambia desde el valor predeterminado.

      Puede usar la función rand de OpenSSL para generar una cadena aleatoria que pueda usar como su cadena de valores sal secreta. Abra un nuevo terminal, conecte de nuevo con su servidor y ejecute el siguiente comando para generar esta cadena:

      La opción -base64 32 garantiza una cadena Base64 codificada de 32 caracteres.

      A continuación, en el archivo de configuración, localice la entrada 'secretsalt' y sustituya defaultsecretsalt por la cadena que generó:

      /var/simplesamlphp/config/config.php

      . . .
      'secretsalt' => 'your_generated_salt',
      . . .
      

      Luego establezca la información de contacto técnico. Esta información estará disponible en los metadatos generados y SimpleSAMLphp enviará informes de error generados automáticamente a la dirección de correo electrónico que especifique. Localice la siguiente sección:

      /var/simplesamlphp/config/config.php

      . . .
      'technicalcontact_name'     => 'Administrator',
      'technicalcontact_email'    => '[email protected]',
      . . .
      

      Sustituya Administrator y [email protected] por los valores apropiados.

      A continuación, configure la zona horaria que desea usar. Localice esta sección:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => null,
      . . .
      

      Sustituya null por una zona horaria preferida de esta lista de zonas horarias para PHP. Asegúrese de poner el valor entre comillas:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => 'America/New_York',
      . . .
      

      Guarde y cierre el archivo. Con esto, debería poder acceder al sitio en su navegador visitando https://your_domain/simplesaml. Verá la siguiente pantalla en su navegador:

      Interfaz web de simplesaml

      Para asegurarse de que su instalación de PHP cumpla con todos los requisitos para que SimpleSAMLphp se ejecute sin problemas, seleccione la pestaña Configuration y haga clic en el enlace Login as administrator. A continuación utilice la contraseña del administrador que configuró en el archivo de configuración en el Paso 3.

      Una vez que inicie sesión, verá una lista de las extensiones necesarias y opcionales de PHP que utiliza SimpleSAMLphp. Compruebe que haya instalado todas las extensiones, a excepción de predis/predis:

      Todas las extensiones instaladas

      Si falta algún componente necesario, revise este tutorial e instale los componentes que faltan antes de continuar.

      También verá un enlace que dice Sanity check de su configuración de SimpleSAMLphp. Haga clic en este enlace para obtener una lista de los controles aplicados a su configuración para ver si se realizan correctamente.

      Ahora configuraremos una fuente de autenticación para SimpleSAMLphp.

      Paso 4: Configurar la fuente de autenticación

      Ahora que tenemos SimpleSAMLphp instalado y configurado, vamos a configurar una fuente de autenticación para poder autenticar a los usuarios. Usaremos una base de datos MySQL a fin de almacenar una lista de nombres de usuarios y contraseñas con los que se realizará la autenticación.

      Para comenzar, inicie sesión en la cuenta root de MySQL:

      Se le solicitará la contraseña root de la cuenta de MySQL. Facilítela para continuar.

      A continuación, cree una base de datos que funcionará como la fuente de autenticación. La llamaremos auth. Puede llamarla como prefiera:

      • CREATE DATABASE auth DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

      Ahora, crearemos un usuario de MySQL independiente para que funcione exclusivamente en nuestra base de datos auth. Desde un punto de vista de la administración y la seguridad, se recomienda crear bases de datos y cuentas de una función. Llamaremos a nuestro usuario authuser. Ejecute el siguiente comando para crear el usuario, configurar una contraseña y conceder a este acceso a nuestra base de datos auth. Recuerde elegir una contraseña segura para el usuario de su nueva base de datos:

      • GRANT ALL ON auth.* TO 'authuser'@'localhost' IDENTIFIED BY 'your_mysql_auth_user_password';

      Ahora, cree una tabla users que constará de dos campos: username y password. Para mayor seguridad, vamos a usar la función MySQL AES_ENCRYPT() para cifrar la cadena de contraseña de forma que no almacenemos las contraseñas en texto sin formato. Esta función cifra una cadena y muestra una cadena binaria.

      • CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

      A continuación, inserte tres usuarios en la tabla recién creada. Aquí es donde usaremos la función AES_ENCRYPT() para cifrar los valores del campo de contraseña. Debe proporcionar una cadena que se utilice como clave de cifrado. Asegúrese de sustituir esta cadena con su propia cadena, que puede ser cualquier cadena que desee, siempre y cuando sea compleja.

      • INSERT INTO auth.users(username, password) VALUES
      • ('user1', AES_ENCRYPT('user1pass','your_secret_key')),
      • ('user2', AES_ENCRYPT('user2pass','your_secret_key')),
      • ('user3', AES_ENCRYPT('user3pass','your_secret_key'));

      Utilice la misma clave para cada usuario y asegúrese de recordar la clave para que pueda usarla de nuevo para crear usuarios adicionales en el futuro. También usará esta clave secreta en la configuración de SimpleSAMLphp para poder descifrar las contraseñas y compararlas con las que introduzca el usuario.

      Debemos eliminar los privilegios de modo que la instancia actual de MySQL registre los cambios recientes en el privilegio:

      Salga de la línea de comandos de MySQL escribiendo lo siguiente:

      Para habilitar la funcionalidad del proveedor de identidad en SimpleSAMLphp, debemos editar el archivo /var/simplesamlphp/config/config.php. Existen varias opciones disponibles pero, dado que esta guía se centra en el soporte SAML 2.0, queremos habilitar la opción enable.saml20-idp. Para hacerlo, abra /var/simplesamlphp/config/config.php y habilite el soporte SAML 2.0.

      • nano /var/simplesamlphp/config/config.php

      Localice esta sección del archivo y sustituya false por true:

      /var/simplesamlphp/config/config.php

      ...
      'enable.saml20-idp' => true,
      ...
      

      Guarde el archivo y cierre el editor.

      Ahora que tenemos habilitada la funcionalidad del proveedor de identidad, debemos indicar el módulo de autenticación que se utilizará. Debido a que disponemos de una tabla de usuarios en una base de datos de MySQL, usaremos el módulo de autenticación de SQL. Abra el archivo de configuración authsources:

      • nano /var/simplesamlphp/config/authsources.php

      Localice el siguiente bloque, que está eliminado:

      /var/simplesamlphp/config/authsources.php

      ...
          /*
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
              'username' => 'simplesaml',
              'password' => 'secretpassword',
              'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',
          ),
          */
      ...
      

      Este código define una conexión con la base de datos y una consulta que SimpleSAMLphp puede usar para buscar un usuario en una tabla de base de datos llamada users. Necesitamos habilitarla y cambiar la consulta para que busque un usuario desde nuestra tabla usando la función AES_DECRYPT() de MySQL. Necesitaremos proporcionar a la función AES_DECRYPT() la misma clave que usamos para cifrar las contraseñas en la consulta.

      Modifique la sección del archivo para especificar los datos de la conexión con la base de datos y la consulta:

      /var/simplesamlphp/config/authsources.php

      ...
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'mysql:host=localhost;port=5432;dbname=auth',
              'username' => 'authuser',
              'password' => 'your_mysql_auth_user_password',
              'query' => 'SELECT username FROM users WHERE username = :username AND AES_DECRYPT(password,"your_secret_key") = :password',
          ),
      ...
      

      Asegúrese de colocar la clave secreta que especificó en lugar de your_secret_key.

      Guarde y cierre el archivo. Probaremos nuestro proveedor de identidad.

      Paso 5: Probar el proveedor de identidad con la Demo SAML 2.0 SP

      Puede probar la fuente de autenticación que acaba de configurar navegando a la pestaña Authentication y haciendo clic en el enlace Test configured authentication sources (Probar fuentes de autenticación configuradas). Se le presentará una lista de las fuentes de autenticación ya configuradas.

      La lista de fuentes de autenticación configuradas

      Haga clic en example-sql, ya que este es el proveedor que configuró en el paso anterior. Se mostrará una solicitud para introducir un nombre de usuario y contraseña. Introduzca cualquiera de las combinaciones de usuario y contraseña de prueba que insertó en la tabla de usuarios de MySQL. Pruebe user1 con la contraseña user1pass.

      Con un intento correcto, se le presentará la página SAML 2.0 SP Demo Example:

      La página de Demo correcta

      Si no puede iniciar sesión y sabe que la contraseña es correcta, asegúrese de usar la misma clave con la función AES_ENCRYPT() cuando creó el usuario, y con la función AES_DECRYPT() cuando buscó el usuario.

      Ahora puede integrar SimpleSAMLphp con sus propias aplicaciones siguiendo la documentación de la API de SimpleSAMLphp.

      Conclusión

      Ahora tiene la aplicación SimpleSAMLphp debidamente instalada y configurada en su VPS Ubuntu 18.04. SimpleSAMLphp también permite personalizar ampliamente la interfaz de usuario con temas. Puede consultar sus documentos sobre temas para obtener más información.



      Source link

      Comment installer et configurer SimpleSAMLphp pour l’authentification SAML sur Ubuntu 18.04


      Introduction

      SimpleSAMLphp est une application d’authentification PHP open-source qui prend en charge SAML 2.0 en tant que fournisseur de services (SP) ou fournisseur d’identité (IdP).

      SAML (Security Assertion Markup Language – Langue de balisage des assertions de sécurité) est un mécanisme de communication sécurisé basé sur XML pour l’échange de données d’authentification et d’autorisation entre les organisations et les applications. Il est souvent utilisé pour mettre en œuvre le Web SSO (Single Sign On). Il n’est donc plus nécessaire de conserver plusieurs justificatifs d’authentification dans plusieurs organisations. En termes simples, vous pouvez utiliser une seule identité, comme un nom d’utilisateur et un mot de passe, pour accéder à plusieurs demandes.

      Une instance de SimpleSAMLphp se connecte à une source d’authentification, qui est un fournisseur d’identité comme LDAP ou une base de données d’utilisateurs. Il authentifie les utilisateurs par rapport à cette source d’authentification avant d’accorder l’accès aux ressources mises à disposition par les fournisseurs de services liés.

      Dans ce tutoriel, vous allez installer SimpleSamlPHP et le configurer pour utiliser une base de données MySQL comme source d’authentification. Vous stockerez les utilisateurs et les mots de passe cryptés dans la base de données MySQL et vérifierez que vous pouvez utiliser ces utilisateurs pour vous connecter.

      Conditions préalables

      Étape 1 – Téléchargement et installation de SimpleSAMLphp

      Installer SimpleSAMLphp se fait en quelques étapes. Nous devons télécharger le logiciel lui-même ainsi que quelques composants et conditions préalables supplémentaires. Nous devrons également apporter quelques modifications à la configuration de notre hôte virtuel.

      Connectez-vous à votre serveur si vous n’êtes pas déjà connecté.

      Téléchargez SimpleSAMLphp sur le site web du projet. SimpleSAMLphp lie toujours la dernière version stable de leur logiciel à la même URL. Cela signifie que nous pouvons obtenir la dernière version en tapant ceci :

      • wget https://simplesamlphp.org/download?latest

      Cela permettra de télécharger un fichier compressé appelé download?latest qui contient SimpleSAMLphp. Extrayez le contenu avec la commande tar : 

      Les fichiers seront extraits dans un nouveau répertoire intitulé simpleamlphp-1.x.yx.y est le numéro de la version actuelle. Utilisez la commande ls pour identifier le fichier :

      Vous verrez le nom du fichier s’afficher :

      Ouptut

      simplesamlphp-1.18.5

      Maintenant, copiez le contenu du répertoire dans /var/simplesamlphp en utilisant la commande cp. Veillez à remplacer le numéro de version par la version que vous avez :

      • sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

      Le commutateur -a garantit que les autorisations de fichiers sont copiées avec les fichiers et les dossiers. Le point à la fin du fichier source garantit que tout ce qui se trouve dans le répertoire source, y compris les fichiers cachés, est copié dans le répertoire de destination.

      Remarque : Si vous devez installer les fichiers dans un autre endroit, vous devrez mettre à jour plusieurs fichiers. Pour plus de détails, consultez la documentation officielle d’installation de SimpleSAMLphp.

      Il existe quelques logiciels supplémentaires dont SimpleSAMLphp a besoin, notamment des extensions PHP pour travailler avec XML, des chaînes de caractères à plusieurs octets, curl et LDAP.  Elle exige également memcached. Installez-les à l’aide de votre gestionnaire de paquets.

      Tout d’abord, mettez à jour votre liste de paquets :

      Ensuite, installez les paquets :

      • sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

      Une fois l’installation terminée, redémarrez Apache pour activer les nouvelles extensions PHP :

      • sudo systemctl restart apache2

      Maintenant que SimpleSAMLphp est installé, configurons Apache pour servir les fichiers.

      Étape 2 – Configuration d’Apache pour servir SimpleSAMLphp

      Vous avez déjà configuré un domaine et pointé sur ce serveur, et vous avez mis en place un hôte virtuel pour travailler avec HTTPS en sécurisant Apache avec Let’s Encrypt. Utilisons cela pour servir SimpleSAMLphp.

      Le seul répertoire SimpleSAMLphp qui doit être visible sur le web est /var/simplesamlphp/www. Pour l’exposer au web, modifiez le fichier de configuration Apache SSL de l’hôte virtuel pour votre domaine.

      Si le fichier de configuration de votre hôte virtuel est nommé your_domain.conf, Let’s Encrypt a créé un nouveau fichier de configuration appelé your_domain-le-ssl.conf qui traite les demandes HTTPS pour votre domaine. Ouvrez le fichier de configuration SSL avec la commande suivante pour modifier le fichier. Veillez à remplacer your_domain avec le nom réel du fichier : 

      • sudo nano /etc/apache2/sites-available/your_domain-le-ssl.conf

      Le dossier doit ressembler à ce qui suit, bien que le dossier lui-même puisse comporter des commentaires plus descriptifs :

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
              ServerName your_domain
      
              ServerAdmin webmaster@localhost
              DocumentRoot /var/www/html
      
              ErrorLog ${APACHE_LOG_DIR}/error.log
              CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      </VirtualHost>
      </IfModule>
      

      La directive ServerName définit ici le domaine de base qui doit correspondre à cette définition d’hôte virtuel. Il doit s’agir du nom de domaine pour lequel vous avez établi un certificat SSL dans la section Conditions préalables. Ajoutons une directive sur les alias qui donne le contrôle à SimpleSAMLphp pour toutes les URL qui correspondent https://votre_domaine/simplesaml/*. Faites-le en ajoutant la ligne suivante au fichier de configuration :

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
      
        Alias /simplesaml /var/simplesamlphp/www
      
      ...
      

      Cela signifie que toutes les URL correspondent <^>domain_name^>/simplesaml/* sera dirigé vers le /var/simplesamlphp/www donnant le contrôle de SimpleSAMLphp. 

      Ensuite, nous donnerons accès au registre/var/simplesamlphp/www en spécifiant un Exiger tout le contrôle d'accès à ce dernier. Le service SimpleSAMLphp sera ainsi accessible sur le Web. Faites-le en ajoutant ce qui suit au fichier de configuration :

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        Alias /simplesaml /var/simplesamlphp/www
        <Directory /var/simplesamlphp/www/>
            Require all granted
        </Directory>
      ...
      

      Enregistrez et fermez le fichier. Redémarrez Apache pour que les changements prennent effet :

      • sudo systemctl restart apache2

      Maintenant qu’Apache est configuré pour servir les fichiers d’application, configurons SimpleSAMLphp.

      Étape 3 – Configuration de SimpleSAMLphp

      Ensuite, nous devons apporter plusieurs modifications à la configuration de base de SimpleSAMLphp située à /var/simplesamlphp/config/config.php. Ouvrez le fichier dans votre éditeur :

      • nano /var/simplesamlphp/config/config.php

      Définissez le mot de passe de l’administrateur en localisant la ligne « auth.adminpassword » et en remplaçant la valeur par défaut de 123 par un mot de passe plus sûr. Ce mot de passe vous permet d’accéder à certaines des pages de votre interface web d’installation de SimpleSAMLphp

      /var/simplesamlphp/config/config.php

      . . .
      'auth.adminpassword'        => 'your_admin_password',
      . . .
      

      Ensuite, définissez un sel secret, qui doit être une chaîne de caractères générée de façon aléatoire. Certaines parties de SimpleSAMLphp utilisent ce sel pour créer des hachages cryptographiquement sécurisés. Vous obtiendrez des erreurs si le sel n’est pas modifié par rapport à la valeur par défaut.

      Vous pouvez utiliser l’OpenSSL La fonction Rand permet de générer une chaîne aléatoire qui vous servira de chaîne de sel secrète. Ouvrez un nouveau terminal, reconnectez-vous à votre serveur et exécutez la commande suivante pour générer cette chaîne :

      L’option -base64 32 garantit une chaîne codée en Base64 de 32 caractères.

      Ensuite, dans le fichier de configuration, localisez l’entrée « secretsalt » et remplacez defaultsecretsalt avec la chaîne que vous avez générée : 

      /var/simplesamlphp/config/config.php

      . . .
      'secretsalt' => 'your_generated_salt',
      . . .
      

      Définissez ensuite les coordonnées techniques. Ces informations seront disponibles dans les métadonnées générées, et SimpleSAMLphp enverra des rapports d’erreur générés automatiquement à l’adresse électronique que vous aurez indiquée. Repérez la section suivante :

      /var/simplesamlphp/config/config.php

      . . .
      'technicalcontact_name'     => 'Administrator',
      'technicalcontact_email'    => '[email protected]',
      . . .
      

      Remplacez Administrator et [email protected] avec des valeurs appropriées. 

      Définissez ensuite le fuseau horaire que vous souhaitez utiliser. Localisez cette section :

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => null,
      . . .
      

      Remplacez null avec un fuseau horaire préférentiel à partir de cette liste de fuseaux horaires pour PHP. Veillez à indiquer la valeur entre guillemets :

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => 'America/New_York',
      . . .
      

      Enregistrez et fermez le fichier. Vous devriez maintenant pouvoir accéder au site dans votre navigateur en visitant https://your_domain/simplesaml. Vous verrez l’écran suivant dans votre navigateur :

      simplesaml web interface

      Pour vous assurer que votre installation PHP répond à toutes les exigences pour le bon fonctionnement de SimpleSAMLphp, sélectionnez l’onglet Configuration et cliquez sur le lien Login as administrator (Se connecter en tant qu’administrateur). Utilisez ensuite le mot de passe administrateur que vous avez défini dans le fichier de configuration à l’étape 3.

      Une fois connecté, vous verrez une liste des extensions PHP obligatoires et facultatives utilisées par SimpleSAMLphp. Vérifiez que vous avez installé toutes les extensions, sauf predis/predis: 

      Toutes les extensions installées 

      S’il manque des composants requis, consultez ce tutoriel et installez les composants manquants avant de passer à autre chose.

      Vous verrez également un lien qui dit Sanity check of your SimpleSAMLphp setup (Contrôle de l’état de santé de votre installation SimpleSAMLphp). Cliquez sur ce lien pour obtenir une liste des contrôles appliqués à votre installation afin de voir s’ils sont réussis.

      Passons à la configuration d’une source d’authentification pour SimpleSAMLphp.

      Étape 4 – Configuration de la source d’authentification

      Maintenant que nous avons installé et configuré SimpleSAMLphp, configurons une source d’authentification afin de pouvoir authentifier les utilisateurs. Nous utiliserons une base de données MySQL pour stocker une liste de noms d’utilisateurs et de mots de passe permettant de s’authentifier.

      Pour commencer, connectez-vous au compte racine MySQL :

      Le mot de passe du compte root MySQL vous sera demandé. Fournissez-le pour pouvoir continuer.

      Ensuite, créez une base de données qui servira de source d’authentification. Nous l’appellerons auth. N’hésitez pas à donner un nom différent au vôtre :

      • CREATE DATABASE auth DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

      Maintenant, créons un utilisateur MySQL séparé pour opérer exclusivement sur notre base de données auth. Du point de vue de la gestion et de la sécurité, c’est une bonne pratique que de créer des bases de données et des comptes à fonction unique. Nous nommerons notre utilisateur authuser.  Exécutez la commande suivante pour créer l’utilisateur, définir un mot de passe et lui donner accès à notre base de données auth. N’oubliez pas de fournir ici un mot de passe fort pour votre nouvel utilisateur de la base de données.

      • GRANT ALL ON auth.* TO 'authuser'@'localhost' IDENTIFIED BY 'your_mysql_auth_user_password';

      Créez maintenant un utilisateur qui sera composé de deux champs : nom d'utilisateur et mot de passe. Pour une sécurité supplémentaire, nous allons utiliser la fonction MySQL AES_ENCRYPT() pour crypter la chaîne de mots de passe afin que nous ne stockions pas les mots de passe en texte clair. Cette fonction crypte une chaîne de caractères et renvoie une chaîne binaire.

      • CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

      Insérez ensuite trois utilisateurs dans le tableau nouvellement créé. C’est là que nous utiliserons la fonction AES_ENCRYPT() pour crypter les valeurs du champ du mot de passe. Vous devez fournir une chaîne qui sert de clé de cryptage. Veillez à remplacer cela par votre propre chaîne, qui peut être n’importe laquelle tant qu’elle est complexe.

      • INSERT INTO auth.users(username, password) VALUES
      • ('user1', AES_ENCRYPT('user1pass','your_secret_key')),
      • ('user2', AES_ENCRYPT('user2pass','your_secret_key')),
      • ('user3', AES_ENCRYPT('user3pass','your_secret_key'));

      Utilisez la même clé pour chaque utilisateur, et assurez-vous de vous souvenir de la clé afin de pouvoir l’utiliser à nouveau pour créer d’autres utilisateurs à l’avenir. Vous utiliserez également cette clé secrète dans la configuration de SimpleSAMLphp afin de pouvoir décrypter les mots de passe et les comparer avec ceux que les utilisateurs saisissent.

      Nous devons vider les privilèges afin que l’instance actuelle de MySQL soit au courant des récents changements de privilèges que nous avons effectués :

      Sortez de l’invite MySQL en tapant :

      Pour activer la fonctionnalité de fournisseur d’identité dans SimpleSAMLphp, nous devons modifier le fichier/var/simplesamlphp/config/config.php. Plusieurs options sont disponibles, mais comme ce guide se concentre sur le support SAML 2.0, nous voulons permettre à l’option enable.saml20-idp.  Pour ce faire, ouvrez /var/simplesamlphp/config/config.php et activez le support SAML 2.0 : 

      • nano /var/simplesamlphp/config/config.php

      Localisez cette section du fichier et remplacez false par true :

      /var/simplesamlphp/config/config.php

      ...
      'enable.saml20-idp' => true,
      ...
      

      Ensuite, enregistrez le fichier et quittez l’éditeur.

      Maintenant que nous avons activé la fonctionnalité de fournisseur d’identité, nous devons indiquer le module d’authentification à utiliser. Comme nous avons une table d’utilisateurs sur une base de données MySQL, nous allons utiliser le module d’authentification SQL. Ouvrez le fichier de configuration authsources :

      • nano /var/simplesamlphp/config/authsources.php

      Localisez le bloc suivant, qui est commenté :

      /var/simplesamlphp/config/authsources.php

      ...
          /*
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
              'username' => 'simplesaml',
              'password' => 'secretpassword',
              'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',
          ),
          */
      ...
      

      Ce code définit une connexion à la base de données et une requête que SimpleSAMLphp peut utiliser pour rechercher un utilisateur dans une table de base de données appelée users. Nous devons le décommenter et modifier la requête pour rechercher un utilisateur dans notre table en utilisant la fonction AES_DECRYPT() de MySQL. Nous devrons fournir à la fonction AES_DECRYPT()la même clé que celle utilisée pour crypter les mots de passe dans la requête. 

      Modifiez la section du fichier pour spécifier les détails de connexion à la base de données et la requête :

      /var/simplesamlphp/config/authsources.php

      ...
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'mysql:host=localhost;port=5432;dbname=auth',
              'username' => 'authuser',
              'password' => 'your_mysql_auth_user_password',
              'query' => 'SELECT username FROM users WHERE username = :username AND AES_DECRYPT(password,"your_secret_key") = :password',
          ),
      ...
      

      Veillez à placer la clé secrète que vous avez indiquée à la place de your_secret_key. 

      Enregistrez et fermez le fichier. Testons notre fournisseur d’identité.

      Étape 5 – Testez le fournisseur d’identité avec la démo de SAML 2.0 SP

      Vous pouvez tester la source d’authentification MySQL que vous venez de mettre en place en naviguant vers l’ onglet Authentification et en cliquant sur le lien Test configured authentication sources​​​ (Tester les sources d’authentification configurées). Une liste des sources d’authentification déjà configurées vous sera présentée.

      La liste des sources d'authentification configurées 

      Cliquez sur l’exemple-sqlcar il s’agit du fournisseur que vous avez configuré à l’étape précédente. Une invite à entrer un nom d’utilisateur et un mot de passe apparaîtra. Entrez l’une des trois combinaisons d’utilisateur et de mot de passe que vous avez insérées dans la table des utilisateurs MySQL. Essayez user1 avec le mot de passe user1pass.

      Si votre tentative est couronnée de succès, vous recevrez la page SAML 2.0 SP Demo Example(Exemple de démo de SAML 2.0 SP) : 

      La page de démonstration réussie 

      Si vous ne pouvez pas vous connecter et que vous savez que le mot de passe est correct, assurez-vous que vous avez utilisé la même clé avec la fonction AES_ENCRYPT() lorsque vous avez créé l’utilisateur, et la fonction AES_DECRYPT() lorsque vous avez recherché l’utilisateur.

      Vous pouvez désormais intégrer SimpleSAMLphp à vos propres applications en suivant les instructions de la Documentation de l’API SimpleSAMLphp. 

      Conclusion

      L’application SimpleSAMLphp est maintenant correctement installée et configurée sur votre VPS Ubuntu 18.04. SimpleSAMLphp permet également une personnalisation poussée de l’interface utilisateur grâce à la thématisation. Vous pouvez vous référer à leur documents thématiques pour en savoir plus à ce sujet. 



      Source link

      Установка и настройка SimpleSAMLphp для аутентификации SAML в Ubuntu 18.04


      Введение

      SimpleSAMLphp — это PHP-приложение для аутентификации с открытым исходным кодом, которое предоставляет поддержку SAML 2.0 в качестве поставщика сервиса (SP) или поставщика учетных записей (IdP).

      SAML (язык разметки подтверждений безопасности) — это защищенный механизм коммуникации на базе XML для обмена данными аутентификации и авторизации между организациями и приложениями. Часто он используется для реализации Web SSO (единый вход в систему). Это устраняет необходимость сохранения нескольких учетных данных для разных организаций. Проще говоря, вы можете использовать одну учетную запись, например имя пользователя и пароль, для доступа к нескольким приложениям.

      Экземпляр SimpleSAMLphp подключается к источнику аутентификации, который представляет собой поставщика удостоверений, например LDAP или база данных пользователей. Он выполняет аутентификацию пользователей для этого источника аутентификации, прежде чем предоставлять доступ к ресурсам, предоставляемым связанным поставщиком сервисов.

      В этом обучающем руководстве вы установите SimpleSamlPHP и настроите его для использования базы данных MySQL в качестве источника информации об аутентификации. Вы сохраните пользователей и зашифрованные пароли в базе данных MySQL и проверите возможность использования этих пользователей для входа.

      Предварительные требования

      • Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 18.04, включая пользователя non-root user с привилегиями sudo и брандмауэр.
      • Apache, MySQL и PHP, установленные на сервере согласно руководству Установка Linux, Apache, MySQL, PHP (стек LAMP) в Ubuntu 18.04.
      • Доменное имя, настроенное так, чтобы указывать на ваш сервер. Информацию о том, как сделать так, чтобы домены указывали на дроплеты DigitalOcean, можно найти в руководстве Как создать указание на серверы имен DigitalOcean из общих реестров доменов.
      • Виртуальный хост, настроенный для домена с помощью директивы ServerName. Следуйте указаниям руководства по настройке виртуальных хостов Apache в Ubuntu 18.04 для настройки вашего доменного имени.
      • Сертификат Let’s Encrypt для домена, который вы настроили согласно руководству по обеспечению безопасности Apache с помощью Let’s Encrypt в Ubuntu 18.04.

      Шаг 1 — Загрузка и установка SimpleSAMLphp

      Установка SimpleSAMLphp выполняется в несколько шагов. Мы должны загрузить программное обеспечение, а также несколько дополнительных компонентов и предварительных требований. Также нам необходимо внести некоторые изменения в нашу конфигурацию виртуального хоста.

      Войдите на сервер, если вы еще не сделали этого.

      Загрузите SimpleSAMLphp на веб-сайте проекта. SimpleSAMLphp всегда использует для последней стабильной версии программного обеспечения один и тот же URL-адрес. Это означает, что мы можем получить последнюю версию, введя следующую команду:

      • wget https://simplesamlphp.org/download?latest

      В результате будет загружен сжатый файл с именем download?latest, который содержит SimpleSAMLphp. Выполните извлечение содержимого файла с помощью команды tar:

      Файлы будут извлечены в новую директорию с именем simplesamlphp-1.x.y, где x.y — это текущий номер версии. Используйте команду ls для идентификации файла:

      Вы увидите отображаемое имя файла:

      Ouptut

      simplesamlphp-1.18.5

      Теперь скопируйте содержимое директории в /var/simplesamlphp​​​ с помощью команды cp. Обязательно замените номер версии на номер вашей версии:

      • sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

      Переключатель -a гарантирует, что разрешения для файла будут скопированы вместе с файлами и папками. Точка в конце файла источника гарантирует, что все содержимое директории источника, включая скрытые файлы, будет скопировано в к назначения.

      Примечание. Если вам потребуется установить файлы в другом месте, вам нужно будет обновить несколько файлов. Подробную информацию см. в официальной документации по установке SimpleSAMLphp.

      Существует несколько дополнительных пакетов программного обеспечения, которые требуются SimpleSAMLphp, включая расширения PHP для работы с XML, многобайтовыми строками, curl и LDAP. Также необходимо установить memcached. Установите все необходимо с помощью вашего диспетчера пакетов.

      Вначале обновите список пакетов:

      Затем выполните установку пакетов:

      • sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

      После завершения установки перезапустите Apache для активации новых расширений PHP:

      • sudo systemctl restart apache2

      Теперь, когда SimpleSAMLphp установлен, давайте настроим Apache для обслуживания файлов.

      Шаг 2 — Настройка Apache для обслуживания SimpleSAMLphp

      Вы уже настроили домен и указали на сервер, а также настроили виртуальный хост для работы с HTTPS, обеспечив защиту Apache с помощью Let’s Encrypt. Давайте используем его для обслуживания SimpleSAMLphp.

      Единственная директория SimpleSAMLphp, которая должна быть видима в сети, — /var/simplesamlphp/www. Чтобы открыть для нее доступ из Интернета, измените файл конфигурации виртуального хоста SSL Apache для вашего домена.

      Если ваш файл конфигурации виртуального хоста имеет имя your_domain.conf, Let’s Encrypt создает новый файл конфигурации your_domain-le-ssl.conf​​​, который обрабатывает запросы HTTPS для вашего домена. Откройте файл конфигурации SSL с помощью следующей команды, чтобы отредактировать файл. Обязательно замените your_domain на актуальное имя файла:

      • sudo nano /etc/apache2/sites-available/your_domain-le-ssl.conf

      Файл должен выглядеть следующим образом, хотя фактический файл может иметь более подробные комментарии:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
              ServerName your_domain
      
              ServerAdmin webmaster@localhost
              DocumentRoot /var/www/html
      
              ErrorLog ${APACHE_LOG_DIR}/error.log
              CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      </VirtualHost>
      </IfModule>
      

      Директива ServerName задает здесь базовый домен, который должен соответствовать этому определению виртуального хоста. Это должно быть доменное имя, для которого вы настроили сертификат SSL согласно информации в разделе предварительных требований. Давайте добавим директиву Alias, которая будет контролировать SimpleSAMLphp для всех URL-адресов, соответствующих https://your_domain/simplesaml/*. Сделайте это, добавив следующую строку в файл конфигурации:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
      
        Alias /simplesaml /var/simplesamlphp/www
      
      ...
      

      Это означает, что все URL-адреса, совпадающие с domain_name/simplesaml/*, будут направляться в директорию /var/simplesamlphp/www, предоставляя контроль SimpleSAMLphp.

      Далее мы предоставим доступ к директории /var/simplesamlphp/www, указав контроль доступа Require all granted​​​ для нее. Это позволит получить доступ к службе SimpleSAMLphp через Интернет. Сделайте это, добавив следующую строку в файл конфигурации:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        Alias /simplesaml /var/simplesamlphp/www
        <Directory /var/simplesamlphp/www/>
            Require all granted
        </Directory>
      ...
      

      Сохраните и закройте файл. Перезапустите Apache для вступления изменений в силу:

      • sudo systemctl restart apache2

      Теперь, когда Apache настроен для обслуживания файлов приложения, давайте настроим SimpleSAMLphp.

      Шаг 3 — Настройка SimpleSAMLphp

      Далее нам необходимо внести несколько изменений в основную конфигурацию SimpleSAMLphp, размещенную в /var/simplesamlphp/config/config.php​​​. Откройте файл в своем редакторе:

      • nano /var/simplesamlphp/config/config.php

      Задайте пароль администратора, заменив в строке 'auth.adminpassword' значение по умолчанию 123​​ на более безопасный пароль. Этот пароль позволяет получить доступ к некоторым страницам в веб-интерфейсе вашей установки SimpleSAMLphp:

      /var/simplesamlphp/config/config.php

      . . .
      'auth.adminpassword'        => 'your_admin_password',
      . . .
      

      Затем задайте соль, которая должна быть сгенерированной случайным образом строкой символов. Некоторые элементы SimpleSAMLphp используют эту соль для создания криптографически защищенных хэшей. Вы получите ошибки, если вы не измените значения в соли по умолчанию.

      Вы можете использовать функцию OpenSSL rand для генерации случайной строки для использования в качестве строки соли. Откройте новый терминал, подключитесь к серверу еще раз и запустите следующую команду для получения этой строки:

      Опция -base64 32 гарантирует получение зашифрованной по алгоритму Base64 строки длиной 32 символа.

      Затем в файле конфигурации найдите запись 'secretsalt'​​​ и замените defaultsecretsalt​​​ на строку, которую вы сгнерировали:

      /var/simplesamlphp/config/config.php

      . . .
      'secretsalt' => 'your_generated_salt',
      . . .
      

      Затем задайте техническую контактную информацию. Эта информация будет доступна в генерируемых метаданных, а SimpleSAMLphp будет отправлять автоматически генерируемые отчеты об ошибке на заданный вами адрес электронной почты. Найдите следующий раздел:

      /var/simplesamlphp/config/config.php

      . . .
      'technicalcontact_name'     => 'Administrator',
      'technicalcontact_email'    => '[email protected]',
      . . .
      

      Замените Administrator​​​ и [email protected] на соответствующие значения.

      Затем задайте часовой пояс, который вы хотите использовать. Найдите следующий раздел:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => null,
      . . .
      

      Замените null​​​ на предпочитаемый часовой пояс из этого списка часовых поясов для PHP. Обязательно поместите значения в кавычки:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => 'America/New_York',
      . . .
      

      Сохраните и закройте файл. Теперь вы можете получить доступ к сайту в браузере, указав в адресной строке https://your_domain/simplesaml​​​. Вы увидите следующий экран в браузере:

      веб-интерфейс simplesaml

      Чтобы убедиться, что ваша установка PHP соответствует всем требованиям SimpleSAMLphp для плавного запуска, выберите вкладку Конфигурация и нажмите ссылку Войти как администратор. Затем воспользуйтесь паролем администратора, заданным в файле конфигурации на шаге 3.

      После входа вы увидите список обязательных и дополнительных расширений PHP, которые используются SimpleSAMLphp. Убедитесь, что вы установили каждое расширение, за исключением predis/predis​​​:

      Все расширения установлены

      Если какие-либо обязательные компоненты отсутствуют, просмотрите это руководство и установите недостающие элементы, прежде чем продолжить.

      Также вы увидите ссылку, которая говорит Проверка работоспособности вашей установки SimpleSAMLphp. Нажмите эту ссылку для получения списка проверок, выполненных для вашей установки, чтобы убедиться, что они выполнены успешно.

      Теперь давайте перейдем к настройке источника аутентификации для SimpleSAMLphp.

      Шаг 4 — Настройка источника аутентификации

      Теперь, когда у нас есть установленная и настроенная версия SimpleSAMLphp, давайте настроим источник аутентификации, чтобы мы могли выполнять аутентификацию пользователей. Мы будем использовать базу данных MySQL для хранения списка имен пользователей и паролей для аутентификации.

      Чтобы начать, выполните вход в учетную запись root MySQL:

      Вам будет предложено ввести пароль учетной записи root MySQL. Предоставьте нужные данные, чтобы продолжить.

      Затем создайте базу данных, которая будет выполнять роль источника аутентификации. Мы назовем ее auth. Вы можете использовать любое имя по желанию.

      • CREATE DATABASE auth DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

      Теперь давайте создадим отдельного пользователя MySQL для работы исключительно в нашей базе данных auth. С точки зрения управления и безопасности рекомендуется использовать базы данных и учетные записи с одной функцией. Мы назовем пользователя authuser. Выполните следующую команду для создания пользователя, задайте пароль и предоставьте доступ к нашей базе данных auth. Не забудьте задать надежный пароль для нового пользователя базы данных.

      • GRANT ALL ON auth.* TO 'authuser'@'localhost' IDENTIFIED BY 'your_mysql_auth_user_password';

      Теперь создайте таблицу users, которая будет состоять из двух полей: username и password. Для дополнительной безопасности мы будем использовать функцию MySQL AES_ENCRYPT() для шифрования строки пароля, чтобы не сохранять пароли в текстовом формате. Эта функция шифрует строку и возвращает бинарную строку.

      • CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

      Затем добавьте трех пользователей в созданную таблицу. Здесь мы будем использовать функцию AES_ENCRYPT() для шифрования значений для поля пароля. Вам необходимо задать строку, которая используется как ключ шифрования. Обязательно замените ее на собственную строку, которая может быть любой строкой, чем длиннее, тем сложнее.

      • INSERT INTO auth.users(username, password) VALUES
      • ('user1', AES_ENCRYPT('user1pass','your_secret_key')),
      • ('user2', AES_ENCRYPT('user2pass','your_secret_key')),
      • ('user3', AES_ENCRYPT('user3pass','your_secret_key'));

      Используйте один ключ для каждого пользователя и обязательно запомните ключ, чтобы вы могли использовать его снова для создания в будущем дополнительных пользователей. Также вы будете использовать этот секретный ключ в конфигурации SimpleSAMLphp, чтобы вы могли расшифровать пароли и сравнивать их с паролями, которые вводят пользователи.

      Нам нужно установить права, чтобы текущий экземпляр MySQL узнал о последних внесенных нами изменениях в права:

      Закройте командную строку MySQL с помощью следующей команды:

      Чтобы активировать функционал поставщика удостоверений в SimpleSAMLphp, нам нужно отредактировать файл /var/simplesamlphp/config/config.php. Существует несколько доступных способов, но поскольку это руководство посвящено поддержке SAML 2.0, мы будем использовать опцию enable.saml20-idp​​​. Для этого откройте /var/simplesamlphp/config/config.php​​​ и активируйте поддержку SAML 2.0:

      • nano /var/simplesamlphp/config/config.php

      Найдите следующий раздел файла и замените false​​ на true:

      /var/simplesamlphp/config/config.php

      ...
      'enable.saml20-idp' => true,
      ...
      

      Сохраните файл и выйдите из редактора.

      Теперь, когда у нас есть активированный поставщик удостоверений, нам нужно указать модуль аутентификации для использования. Поскольку у нас есть таблица пользователей в базе данных MySQL, мы будем использовать модуль аутентификации SQL. Откройте файл конфигурации authsources​​​:

      • nano /var/simplesamlphp/config/authsources.php

      Найдите следующий закомментированный блок:

      /var/simplesamlphp/config/authsources.php

      ...
          /*
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
              'username' => 'simplesaml',
              'password' => 'secretpassword',
              'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',
          ),
          */
      ...
      

      Этот код определяет подключение к базе данных и запрос, который SimpleSAMLphp может использовать для поиска пользователя в таблице базы данных с именем users. Нам нужно разкомментировать его и изменить запрос для поиска пользователя из нашей таблицы с помощью функции MySQL AES_DECRYPT(). Нам нужно предоставить функции AES_DECRYPT() тот же ключ, который мы использовали для шифрования паролей в запросе.

      Измените раздел файла, чтобы указать данные подключения к базе данных и запрос:

      /var/simplesamlphp/config/authsources.php

      ...
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'mysql:host=localhost;port=5432;dbname=auth',
              'username' => 'authuser',
              'password' => 'your_mysql_auth_user_password',
              'query' => 'SELECT username FROM users WHERE username = :username AND AES_DECRYPT(password,"your_secret_key") = :password',
          ),
      ...
      

      Обязательно укажите секретный ключ, который вы задали, вместо your_secret_key.

      Сохраните и закройте файл. Давайте проверим нашего поставщика удостоверений.

      Шаг 5 — Тестирование поставщика удостоверений с помощью SAML 2.0 SP Demo

      Вы можете протестировать источник аутентификации MySQL, который вы только что настроили, перейдя на вкладку Аутентификация и нажав ссылку Проверить настроенные источники аутентификации. Вы увидите список настроенных источников аутентификации.

      Список настроенных источников аутентификации

      Нажмите example-sql, поскольку это ваш поставщик, настроенный на предыдущем шаге. Появится запрос на ввод имени пользователя и пароля. Введите данные для любого из трех тестовых пользователей, которых вы добавили в таблицу пользователей MySQL. Попробуйте использовать user1 с паролем user1pass.

      После успешной попытки входа вы увидите страницу SAML 2.0 SP Demo Example​​​:

      Успешная страница демо

      Если вы не можете выполнить вход и знаете, что пароль верный, убедитесь, что вы применяли один и тот же ключ для функции AES_ENCRYPT(), используемой при создании пользователя, и функции AES_DECRYPT(), которая использовалась при поиске пользователя.

      Теперь вы можете интегрировать SimpleSAMLphp в ваше приложение согласно документации SimpleSAMLphp API.

      Заключение

      Теперь у вас есть установленное и настроенное соответствующим образом приложение SimpleSAMLphp в Ubuntu 18.04 VPS. SimpleSAMLphp также позволяет использовать широкий набор вариантов пользовательской настройки интерфейса с помощью тем. Вы можете ознакомиться с документацией по использованию тем для получения дополнительной информации.



      Source link