Mod auth mellon diegimas ir konfigūravimas

Iš LITNET WIKI.
Peršokti į: navigacija, paiešką

mod_auth_mellon

Tai Apache modulis, autentifikuojantis vartotoją pas SAML 2.0 IdP ir suteikiantis vartotojui prieigos teises į webserverio katalogus, priklausomai nuo iš IdP gautų atributų reikšmių.

Modulio diegimas:

apt-get install libapache2-mod-auth-mellon

Šiam moduliui reikalingi tam tikri kiti paketai, kuriuos jis pats pasiūlys įsidiegti.

Modulio globali konfigūracija yra čia:

/etc/apache2/mods-available/auth_mellon.conf

Paprastai čia nieko keisti nereikia, tinka default nustatymai.

Prieš konfigūruojant apache, reikia turėti raktą ir xml failus, kuriuos padėsime į /etc/apache2/mellon katalogą.

  • SP.key:
openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out SP.crt -keyout SP.key
  • metadataIdP.xml:
wget https://login.domenas.lt/simplesaml/saml2/idp/metadata.php
  • metadataSP.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EntityDescriptor
   entityID="https://paslauga.domenas.lt"
   xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
 <SPSSODescriptor
     AuthnRequestsSigned="false"
     WantAssertionsSigned="false"
     protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
   <SingleLogoutService
       Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
       Location="https://paslauga.domenas.lt/mellon/logout" />
   <NameIDFormat>
     urn:oasis:names:tc:SAML:2.0:nameid-format:transient
   </NameIDFormat>
   <AssertionConsumerService
       index="0"
       isDefault="true"
       Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
       Location="https://paslauga.domenas.lt/mellon/postResponse" />
 </SPSSODescriptor>
</EntityDescriptor>

Šiame faile svarbu, kad EntityID sutaptų su IdP konfigūracijoje naudojamu ID, bei abu Location parametrai turi rodyti į atitinkamus mod_auth_mellon endpoint URL.

Šių failų sugeneravimui galima naudoti skriptą:

wget https://raw.githubusercontent.com/UNINETT/mod_auth_mellon/master/mellon_create_metadata.sh
chmod +x mellon_create_metadata.sh
mellon_create_metadata.sh urn:someservice https://sp.example.org/mellon

Sugeneruotus failus padedame čia:

/etc/apache2/mellon

Sukonfigūruojame IdP. Tam .../simplesamlphp/metadata/saml20-sp-remote.php faile turi atsirasti eilutės:

$metadata['https://paslauga.domenas.lt'] = array (
   'consent.disable' => TRUE,
   'AssertionConsumerService' => 'https://paslauga.domenas.lt/mellon/postResponse',
   'SingleLogoutService' => 'https://paslauga.domenas.lt/mellon/logout',
   'metadata-index' => 'https://paslauga.domenas.lt/mellon/metadata',
   'metadata-set' => 'saml20-sp-remote',
   'name' => array (
       'en' => 'Equipment monitoring system',
       'lt' => 'Įrangos stebėjimo sistema',
   ),
   'attributes'  => array('uid', 'eduPersonAffiliation'),
   'contacts' => array (
       'surName' => 'Pavardė',
       'givenName' => 'Vardas',
       'emailAddress' => 'vardas.pavarde@domenas.lt',
       'contactType' => 'technical',
   ),
   'authproc' => array(
       // Convert LDAP names to oids.
       100 => array('class' => 'core:AttributeMap', 'oid2name'),
   ),
);

Aišku konfigūraciją reikia adaptuoti pagal savo poreikius.

Apache vhost'o konfigūracija:

       # Vieta, kurioje sukonfigūruotas mellon endpoint'as
       <Location /mellon>
               MellonEnable "info"
               MellonSPPrivateKeyFile "/etc/apache2/mellon/SP.key"
               MellonSPMetadataFile "/etc/apache2/mellon/metadataSP.xml"
               MellonIdPMetadataFile "/etc/apache2/mellon/metadataIdP.xml"
       </Location>

       # Vieta, kurią norime leisti tik autorizuotiems vartotojams
       <Location />
               MellonEnable "auth"
               MellonIdPMetadataFile "/etc/apache2/mellon/metadataIdP.xml"
               MellonRequire "eduPersonAffiliation" "employee"
               MellonUser "uid"
               MellonSecureCookie On
               MellonCookiePath /
       </Location>

Debug'inimui galima susikurti php failą, kuris parodytų apache kintamųjų reikšmes po autentifikacijos:

<?php
header('Content-Type: text/plain');
foreach($_SERVER as $key=>$value) {
  if(substr($key, 0, 7) == 'MELLON_') {
    echo($key . '=' . $value . "\r\n");
  }
}

foreach($_SERVER as $key=>$value) {
  echo($key . '=' . $value . "\r\n");
}
?>

Pastaba: rekomenduojama naudoti ir sertifikatus, tam turėtų atsirasti informacija apie naudojamą sertifikatą xml failuose bei apache config'e.

Modulio dokumentacija:

https://github.com/UNINETT/mod_auth_mellon