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.
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.
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.
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.
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
<?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 ,
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.
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 IdP.