Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagebash
themeConfluence
titleCreazione Certificati
cd /{progetto}/simplesamlphp/dev/certs
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out simplesaml.crt -keyout simplesaml.pem
openssl rsa -in simplesaml.pem -out simplesaml.key

Questo creerà 3 files simplesaml.crt,simplesaml.pem,simplesaml.key

...

Code Block
languagebash
themeConfluence
titleCertificati SP
cd /{progetto}/certs
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out drupal.crt -keyout drupal.pem
openssl rsa -in drupal.pem -out drupal.key

Questi certificati saranno i nostri certificati X.509 per l'SP.

...

Puoi accedere a questo utilizzando la password di amministrazione che hai impostato sopra.

{{FOTO}}Image Added

Il sistema non fa molto al momento, quindi abilitiamo alcuni protocolli e moduli di autenticazione.

...

Si noti che quanto sopra utilizza una fonte di autenticazione chiamata "example-userpass". Questo viene fornito in bundle con SimpleSAMLphp come sistema di autenticazione di esempio e fornisce agli utenti una matrice piatta di credenziali utente e password. Questo va bene da usare per l'installazione e il test, ma probabilmente non è una buona idea da usare in produzione. La configurazione per questo sistema di autenticazione è conservata nel file authsources.php nella tua directory di configurazione. Devi anche aver abilitato il modulo 'exampleauth' nella tua configurazione.

Con questo array di questa configurazione in posizione, vai alla scheda "Federazione" nella configurazione di SimpleSAMLphp. Ora dovresti vedere il tuo IdP nell'elenco. Questo è visualizzabile anche senza aver effettuato l'accesso come amministratore dell'applicazione.


Fai clic su "Mostra metadati", vedrai un mucchio di output. Questo è costituito dall'URL dei metadati, dall'XML dei metadati SAML 2.0, da una rappresentazione PHP degli stessi e dal certificato x509 pubblico che abbiamo creato in precedenza che viene utilizzato per crittografare/decrittografare i dati.

Image Added

Copia l'output PHP e incollalo in saml20-ipd-remote.php nella directory dei metadati.

Torneremo su SimpleSAMLphp tra un po', ma prima dobbiamo configurare Drupal.

Configurare Drupal come un IDP

Un requisito per far funzionare tutto questo in Drupal è l'uso del modulo drupalauth4ssp. Questo viene installato tramite il composer.

Una volta installato il modulo, puoi andare alla pagina di configurazione del modulo nel percorso /admin/config/people/drupalauth4ssp. Non c'è molto da configurare qui, devi solo assicurarti che il campo Authsource corrisponda alla fonte di autenticazione che hai impostato nel file authsources.php. Per impostazione predefinita questo è drupal-userpass.
Authsource: drupal-userpass

Allowed List of URLs for ReturnTo Parameter: *

Facoltativamente, puoi aggiungere URL all'elenco dei parametri ReturnTo consentiti. Questo viene utilizzato dal sistema di autenticazione per rimandare gli utenti ai loro siti di origine (ovvero l'SP a cui stanno tentando di accedere) e quindi può essere una misura di sicurezza aggiuntiva per impedire ai siti indesiderati di utilizzare il tuo sito come IdP.

Questo è praticamente tutto in termini di configurazione di Drupal come IdP. Il modulo Drupal drupalauth4ssp è praticamente plug and play.

Code Block
languagephp
themeConfluence
titlesaml20-idp-remote
$metadata['ssotestdrupal'] = [
    'metadata-set' => 'saml20-idp-remote',
    'entityid' => 'ssotestdrupal',
    'SingleSignOnService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://multisite.ddev.site/idp/saml2/idp/SSOService.php',
        ],
    ],
    'SingleLogoutService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://multisite.ddev.site/idp/saml2/idp/SingleLogoutService.php',
        ],
    ],
    'certData' => '[REMOVED]',
    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
];


Torneremo su SimpleSAMLphp tra un po', ma prima dobbiamo configurare Drupal.

Configurare Drupal come un IDP

Un requisito per far funzionare tutto questo in Drupal è l'uso del modulo drupalauth4ssp. Questo viene installato tramite il composer.

Una volta installato il modulo, puoi andare alla pagina di configurazione del modulo nel percorso /admin/config/people/drupalauth4ssp. Non c'è molto da configurare qui, devi solo assicurarti che il campo Authsource corrisponda alla fonte di autenticazione che hai impostato nel file authsources.php. Per impostazione predefinita questo è drupal-userpass.
Authsource: drupal-userpass

Allowed List of URLs for ReturnTo Parameter: *

Image Added

Facoltativamente, puoi aggiungere URL all'elenco dei parametri ReturnTo consentiti. Questo viene utilizzato dal sistema di autenticazione per rimandare gli utenti ai loro siti di origine (ovvero l'SP a cui stanno tentando di accedere) e quindi può essere una misura di sicurezza aggiuntiva per impedire ai siti indesiderati di utilizzare il tuo sito come IdP.

Questo è praticamente tutto in termini di configurazione di Drupal come IdP. Il modulo Drupal drupalauth4ssp è praticamente plug and play.

Naturalmente, questa configurazione non fa assolutamente nulla da sola, è necessario un sistema per essere un fornitore di servizi in modo da potervi accedere.


Configurazione di un Drupal SP per accedere all'IdP Drupal

Quello che vogliamo fare è configurare un altro sito Drupal come SP in modo che gli utenti dell'IdP Drupal possano accedere all'SP utilizzando le credenziali create nell'IdP. In sostanza, se gli utenti desiderano accedere al sito 2 (ovvero l'SP), devono autenticarsi sul sito 1 (ovvero l'IdP).Le istruzioni qui sono che dovresti installare e configurare il modulo.



Code Block
languagebash
themeConfluence
composer require drupal/samlauth



Dopo aver installato il modulo, vai alla pagina di configurazione in /admin/config/people/saml. Ci sono MOLTI campi in questo modulo ed è piuttosto intimidatorio quando lo vedi per la prima volta, quindi suddividiamo il modulo in sezioni.

LOGIN / LOGOUT

Questo controlla i collegamenti su cui gli utenti faranno clic per accedere e disconnettersi utilizzando SAML, nonché alcuni reindirizzamenti dopo aver eseguito tali azioni. Probabilmente puoi lasciare questa sezione così com'è, a meno che tu non voglia personalizzarla in modo specifico.

SERVICE PROVIDER

Questa sezione descrive in dettaglio i dettagli SP del tuo sito Drupal.

Il primo campo si chiama Entity ID ed è quello che verrà chiamato il tuo SP quando viene indicato nell'applicazione SimpleSAMLphp. L'impostazione di questo valore su qualcosa di utile consente di identificare a cosa si riferisce la configurazione SP.

La parte successiva di questa sezione è il certificato che verrà utilizzato per crittografare i metadati XML. Nel file Leggimi del modulo di autenticazione SAML sono presenti molti dettagli sui diversi modi per archiviare queste informazioni.

Il modo più sicuro è probabilmente utilizzare l'impostazione "file" per la gestione del certificato e fare semplicemente riferimento ai file direttamente nell'applicazione.

All'inizio di questo articolo ho creato certificati per Drupal e li ho archiviati in una directory "certs". Tutto quello che devi fare qui è fare riferimento ai certificati nei campi di questa sezione. Aggiungere drupal.pem al campo del nome file della chiave privata e drupal.crt al campo del nome file del certificato X.509. Il nuovo nome file del certificato x509 non è necessario e può quindi essere lasciato vuoto.La tua configurazione dovrebbe assomigliare un po' alla seguente.

Image Added

IDENTITY PROVIDER

In questa sezione dobbiamo informare Drupal del nostro sistema IdP (cioè l'istanza di SimpleSAMLphp). Se guardi il codice PHP che abbiamo generato in precedenza e archiviato in saml20-ipd-remote.php dovresti essere in grado di vedere quali elementi vanno dove qui. L'ID entità all'inizio di questa sezione è il nome che abbiamo assegnato all'IdP all'inizio del processo, quindi nel nostro caso è ssotestdrupal. I campi Single Sign On Service e Single Logout Service nel modulo sono etichettati come tali nel PHP.

Il certificato X.509 è il contenuto dell'elemento certData nel PHP. Qui hai la possibilità di caricare il tuo file di certificato sul server e fare riferimento ad esso, o copiare il valore di certData nel modulo di configurazione, che a sua volta verrà esportato nella tua configurazione Drupal. Il modo in cui memorizzi questo valore dipende da te, ma poiché si tratta di un certificato pubblico potresti riuscire tramite la configurazione. Una cosa da notare è che se copi il valore da PHP, il modulo aggiungerà automaticamente l'intestazione e il piè di pagina di "BEGIN CERTIFICATE" al valore, quindi non preoccuparti se viene aggiunto magicamente.

Il tuo modulo di configurazione dovrebbe essere simile al seguente.

Image Added

USER INFO AND SYNCING

La prossima è la sezione relativa alle informazioni sull'utente e alla sincronizzazione. Qui, dobbiamo solo inserire il nome utente e gli attributi email dell'utente in modo che corrispondano ai campi che abbiamo impostato nel file authsources.php.

In questo caso il nome utente è 'cn' e l'indirizzo email dell'utente è 'mail'. Le altre opzioni qui spetta a te abilitare o disabilitare. Le impostazioni nello screenshot qui sotto sono piuttosto aperte e consentono un maggiore controllo sulla corrispondenza dei campi utente rispetto a quanto dovrebbe essere abilitato in un ambiente di produzione. Detto questo, dipende da te quanto aprire le impostazioni per la tua installazione.

Image Added

Aggiunta della configurazione Drupal a SimpleSAMLphp

Infine, dobbiamo copiare la configurazione dal Drupal SP nel Drupal IdP. Dovresti andare al percorso /saml/metadata nel sito SP e copiare l'XML da quella pagina, convertirlo in un array PHP in SimpleSAMLphp.

Dalla pagina /saml/metadata

appare un xml in questo modo


Code Block
languagexml
themeConfluence
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2023-08-16T06:21:37Z" cacheDuration="PT604800S" entityID="DrupalSP" ID="pfx7c9e778a-25cf-85a4-24bb-7d58247d5eaa"><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
  <ds:Reference URI="#pfx7c9e778a-25cf-85a4-24bb-7d58247d5eaa"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>VCg0woxsW0K9uYNmosRF4z/u1EcLDe48yALx5W79U7U=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>lALbY9+TjURYpfm+S2v8RT6NgBCSnOHN6i2pL7KLY/hOuAh/gXH5wtA3njoWLF/StwwtNtPGXhz5OcYk2zBzjX+o6+MnHjLZb2PjKvjZpfZ74BPSq332diUOEpULURDTmZGwHrDE0UnsMBdN0h7FcsXLACHGQWvveXSxdwT6n0ARsu+2MHTlxtQrqZKL0ycNcwgcq7DJ6qiYEs3RX8hU5CnEl7EHji3rTIHHiiCJjhhSSO1BkmaqRxf8Nj7XoGGPI0fYAftjZf8WU/2dVd7+zOJZfqx+aTFzLxjOBd5iTnG3LAxj3REbzQbY+prHBOurL5GDgISDdGn8hL5bwt1k5iZzKzIkkhSj9b1yqJ/GuWpjT+SlQR9oRTeak/DcAhHnSKwFNA//V9iFXyK2oUu/VTPwQbEZVIiItUQ54AWXaZ/e5Eu4G9nVToeC/q81GjD1BTDfz4QWNdF2JPE7BUyOvgNx+N6iFUI0dy1NOy8wrJVNm+QCYMmZj0+7pI2gwbwg</ds:SignatureValue>
<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIE8zCCA1ugAwIBAgIUDjUT5iCQc/E6iw7tsqIsYOh39AAwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAklUMQ4wDAYDVQQIDAVJdGFseTEQMA4GA1UEBwwHQm9sb2duYTEPMA0GA1UECgwGQ0lORUNBMRAwDgYDVQQLDAdQb3J0YWxpMRIwEAYDVQQDDAltdWx0aXNpdGUxIDAeBgkqhkiG9w0BCQEWEXRvbGlAdWx0cmFiaXQub3JnMB4XDTIzMDgxNDA5Mjk0NVoXDTMzMDgxMzA5Mjk0NVowgYgxCzAJBgNVBAYTAklUMQ4wDAYDVQQIDAVJdGFseTEQMA4GA1UEBwwHQm9sb2duYTEPMA0GA1UECgwGQ0lORUNBMRAwDgYDVQQLDAdQb3J0YWxpMRIwEAYDVQQDDAltdWx0aXNpdGUxIDAeBgkqhkiG9w0BCQEWEXRvbGlAdWx0cmFiaXQub3JnMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3Mm7TZlo2lcR1ecGbjBSEcNOIX9XvTMu+/gRbot2yY3Io7qhtUZIp73jrU9Iaqlk2GvuxbysoSzdlDsrrc3+HJ7Kqu1xJi1tOZ0wiMEZOdoRPfCkWdpgmDnVCJomS2D55oqB3+b0nV/74w2QtPI69VaSpAxtDB22ojtoxakMAyZ+ynt5ggaMQtOIb1w5vFdOlSsrV0yPXA1QV1IaIfvvWuq5/SRWtIE8bPneh9GlC+MU3KKaRhT0jyubxEV9s30lSohZ8o8r7AjlTq+Yx4n4j5JDG1lKCUc86GRj0mLZ7GXmQQilvtNMBw/R1+EUaS7HvvUqbZwsG4dlMNFW6vOTfRbe0devpCEBOB8JmzoUYJanAnBv8EYVf1euCsgYvQsginWzjw8/Bx5bEGh/FPS1pPChOlMqwrDZhLqdUGaLkxICNNe8EExXqnHq0h+egiZGPLjtOVBAvImsQHfUiLLORpw2uacVW/+wmMadqwOhyUXlJZZU9uM81+PeEAtzGI0tAgMBAAGjUzBRMB0GA1UdDgQWBBQFHhXiJRQE2mvwbL0TZAz/mw0D7TAfBgNVHSMEGDAWgBQFHhXiJRQE2mvwbL0TZAz/mw0D7TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBgQAlQVF5uNYRVCxGBO3rOLlauNPcyGS0YYj3eTme5Qi5jLrgFmimd2KmWjPx21rLe337xYCnyuox6Z7RrcX9fXnfznRFbYB/PFIqwyuplfNuMvfy8Y+HOqL2ne+mgYplExbt4AZPbA4kGCdfHw5QYi0KTEQRnyLoxT0iObCzfVQOcqsaa+PwnriGMtnW6uGhhrwgSiTjyToZzPGHnBU1UKXoPwprj69KtBf0zxh2aUQ9ego5pkAmiLCQCCVIjeIIWGZou40YRZ+K/XLtNj77uiRlDCBClDTkCZAlarhqluBCWBEgV+3Q0otTGwFMZHHqcHBZFTr7NzLeyRogVEJkzr0jV7uAOgonruRtg0Lw7H4AYmc/bVgrH75O6HRRaDpGfzztQGt/2Oirh4G5+ZZa7MWaU6bfad0Bvz0H9P9mvE1brMrZfnNcrroTwl9m1Kj78Q8mZV/s4x9fAzjx29TT0/ZZbhAzDXp6qIc3iDesk8KWVvYum8vxbqEtxOvNqsXEGKw=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>
  <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>MIIE8zCCA1ugAwIBAgIUDjUT5iCQc/E6iw7tsqIsYOh39AAwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAklUMQ4wDAYDVQQIDAVJdGFseTEQMA4GA1UEBwwHQm9sb2duYTEPMA0GA1UECgwGQ0lORUNBMRAwDgYDVQQLDAdQb3J0YWxpMRIwEAYDVQQDDAltdWx0aXNpdGUxIDAeBgkqhkiG9w0BCQEWEXRvbGlAdWx0cmFiaXQub3JnMB4XDTIzMDgxNDA5Mjk0NVoXDTMzMDgxMzA5Mjk0NVowgYgxCzAJBgNVBAYTAklUMQ4wDAYDVQQIDAVJdGFseTEQMA4GA1UEBwwHQm9sb2duYTEPMA0GA1UECgwGQ0lORUNBMRAwDgYDVQQLDAdQb3J0YWxpMRIwEAYDVQQDDAltdWx0aXNpdGUxIDAeBgkqhkiG9w0BCQEWEXRvbGlAdWx0cmFiaXQub3JnMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3Mm7TZlo2lcR1ecGbjBSEcNOIX9XvTMu+/gRbot2yY3Io7qhtUZIp73jrU9Iaqlk2GvuxbysoSzdlDsrrc3+HJ7Kqu1xJi1tOZ0wiMEZOdoRPfCkWdpgmDnVCJomS2D55oqB3+b0nV/74w2QtPI69VaSpAxtDB22ojtoxakMAyZ+ynt5ggaMQtOIb1w5vFdOlSsrV0yPXA1QV1IaIfvvWuq5/SRWtIE8bPneh9GlC+MU3KKaRhT0jyubxEV9s30lSohZ8o8r7AjlTq+Yx4n4j5JDG1lKCUc86GRj0mLZ7GXmQQilvtNMBw/R1+EUaS7HvvUqbZwsG4dlMNFW6vOTfRbe0devpCEBOB8JmzoUYJanAnBv8EYVf1euCsgYvQsginWzjw8/Bx5bEGh/FPS1pPChOlMqwrDZhLqdUGaLkxICNNe8EExXqnHq0h+egiZGPLjtOVBAvImsQHfUiLLORpw2uacVW/+wmMadqwOhyUXlJZZU9uM81+PeEAtzGI0tAgMBAAGjUzBRMB0GA1UdDgQWBBQFHhXiJRQE2mvwbL0TZAz/mw0D7TAfBgNVHSMEGDAWgBQFHhXiJRQE2mvwbL0TZAz/mw0D7TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBgQAlQVF5uNYRVCxGBO3rOLlauNPcyGS0YYj3eTme5Qi5jLrgFmimd2KmWjPx21rLe337xYCnyuox6Z7RrcX9fXnfznRFbYB/PFIqwyuplfNuMvfy8Y+HOqL2ne+mgYplExbt4AZPbA4kGCdfHw5QYi0KTEQRnyLoxT0iObCzfVQOcqsaa+PwnriGMtnW6uGhhrwgSiTjyToZzPGHnBU1UKXoPwprj69KtBf0zxh2aUQ9ego5pkAmiLCQCCVIjeIIWGZou40YRZ+K/XLtNj77uiRlDCBClDTkCZAlarhqluBCWBEgV+3Q0otTGwFMZHHqcHBZFTr7NzLeyRogVEJkzr0jV7uAOgonruRtg0Lw7H4AYmc/bVgrH75O6HRRaDpGfzztQGt/2Oirh4G5+ZZa7MWaU6bfad0Bvz0H9P9mvE1brMrZfnNcrroTwl9m1Kj78Q8mZV/s4x9fAzjx29TT0/ZZbhAzDXp6qIc3iDesk8KWVvYum8vxbqEtxOvNqsXEGKw=</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://federal.ddev.site/saml/sls"/>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://federal.ddev.site/saml/acs" index="1"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

Se non si vede in questo modo(es con firefox, bisogna fare un click destro con il mouse e cliccare su "View page source").

Questo xml va copiato nel nostro /idp, di seguito selezionando Federation e andando al link XML to SimpleSAMLphp metadata converter ,

Image Added

La differenza fondamentale è che devi aggiungere l'array PHP al file saml20-sp-remote.php nella tua istanza IdP SimpleSAMLphp. Quindi copiando l'XML produce l'array PHP da copiare al file.

Image Added


Ora, quando gli utenti desiderano accedere al sito Drupal SP, accedono al sito Drupal IdP e vengono reindirizzati al sito SP e autenticati anche lì. Se l'utente non è noto al sito SP, gli attributi inviati dall'IdP vengono utilizzati per creare l'utente e inserire i suoi dettagli (supponendo che esistano anche sul sito IdP).Seguendo queste istruzioni, non c'è nulla che ci impedisca di configurare più istanze SP di Drupal e consentire a tutte di autenticarsi rispetto all'installazione centrale di Drupal IdPNaturalmente, questa configurazione non fa assolutamente nulla da sola, è necessario un sistema per essere un fornitore di servizi in modo da potervi accedere.