<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
		<id>https://wiki.niif.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ecsedi%28AT%29unideb.hu</id>
		<title>Pro-M - Oktatási Üzletág - Wiki - Szerkesztő közreműködései [hu]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.niif.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ecsedi%28AT%29unideb.hu"/>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/Ecsedi(AT)unideb.hu"/>
		<updated>2026-11-07T22:22:02Z</updated>
		<subtitle>Szerkesztő közreműködései</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4554</id>
		<title>O365 SAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4554"/>
				<updated>2020-02-27T08:06:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ecsedi(AT)unideb.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az Office365 szolgáltatások SAML azonosítással történő használatához egy új SP-t kell konfigurálni az IdP konfigurációjában, mivel ez az SP nem szerepel a föderációs metaadatok között. A Microsoft által üzemeltetett SP-nek speciális attribútum igényei vannak:&lt;br /&gt;
* perzisztens NameID-t kell küldeni ('''ImmutableID''')&lt;br /&gt;
* kell küldeni egy '''IDPEmail''' nevű attribútumot&lt;br /&gt;
&lt;br /&gt;
== Kiadott attribútumok ==&lt;br /&gt;
=== ImmutableID ===&lt;br /&gt;
Az ImmutableID az eduPersonPrincipalName attribútum MD5 hashének UUID formátumra konvertált változata.&lt;br /&gt;
&lt;br /&gt;
=== IDPEmail ===&lt;br /&gt;
A kiadott e-mail értéknek meg kell egyeznie az Office365 által szolgáltatott e-mail címmel. Ez azt is jelenti, hogy az IdP-től kapott e-mail attribútum domain részét előzetesen validálni kell az Office365-ben.&lt;br /&gt;
&lt;br /&gt;
== SimpleSAMLphp ==&lt;br /&gt;
A &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ba kell elhelyezni a következő bejegyzést:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  'entityid' =&amp;gt; 'urn:federation:MicrosoftOnline',&lt;br /&gt;
&lt;br /&gt;
  // Expose both required attributes &lt;br /&gt;
  'attributes' =&amp;gt; array('IDPEmail', 'ImmutableID'),&lt;br /&gt;
  'attributes.NameFormat' =&amp;gt; &amp;quot;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  // Configure attribute mapping and ImmutableID generation&lt;br /&gt;
  'authproc' =&amp;gt; array(&lt;br /&gt;
    31 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:PHP',&lt;br /&gt;
      'code' =&amp;gt; '&lt;br /&gt;
        $eppn = $attributes[&amp;quot;eduPersonPrincipalName&amp;quot;][0];&lt;br /&gt;
        $chunks = str_split(md5($eppn), 4);        &lt;br /&gt;
        $attributes[&amp;quot;ImmutableID&amp;quot;][0] = vsprintf(&amp;quot;%s%s-%s-%s-%s-%s%s%s&amp;quot;, $chunks);&lt;br /&gt;
      ',&lt;br /&gt;
    ),&lt;br /&gt;
        36 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:AttributeMap',&lt;br /&gt;
      'mail' =&amp;gt; 'IDPEmail',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  // Send ImmutableID as a &amp;quot;persistent&amp;quot; NameID&lt;br /&gt;
  'NameIDFormat' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',&lt;br /&gt;
  'simplesaml.nameidattribute' =&amp;gt; 'ImmutableID',&lt;br /&gt;
&lt;br /&gt;
  'contacts' =&amp;gt; array(),&lt;br /&gt;
  'metadata-set' =&amp;gt; 'saml20-sp-remote',&lt;br /&gt;
&lt;br /&gt;
  'AssertionConsumerService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 0,&lt;br /&gt;
      'isDefault' =&amp;gt; true,&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 1,&lt;br /&gt;
    ),&lt;br /&gt;
    2 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:PAOS',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 2,&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'SingleLogoutService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt;&lt;br /&gt;
    array(&lt;br /&gt;
    'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
    'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  'keys' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUz&lt;br /&gt;
        NDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYD&lt;br /&gt;
        KgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8&lt;br /&gt;
        fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0&lt;br /&gt;
        eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B&lt;br /&gt;
        5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4b&lt;br /&gt;
        PPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mM&lt;br /&gt;
        UqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQ&lt;br /&gt;
        s6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyv&lt;br /&gt;
        f2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52W&lt;br /&gt;
        oM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tq&lt;br /&gt;
        zHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpx&lt;br /&gt;
        SDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYi&lt;br /&gt;
        kA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5q&lt;br /&gt;
        K3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx&lt;br /&gt;
        2ZDQaQ==',&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJAKLDsqkylLefMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDEwMTAxODE2&lt;br /&gt;
        MTNaFw0xOTEwMDkxODE2MTNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7A&lt;br /&gt;
        3m6uvOxEsX+NlB1hnflaR8DJj597wY3qyh/FX4O6rKvU2leAfINmBWcjEFApCKi9&lt;br /&gt;
        p5uIaZpNlDpPQ+R3BaZx+4NhHbOMpeWlpIiZHL61lwbulzurffUPhtzQNHAVzOBk&lt;br /&gt;
        ZsOgN9BD/hOleU//d+IXz08ateUb3Ip2vyaodilYQDDi5M9yOhanv1cO1Usjo2xT&lt;br /&gt;
        LfiK+TVygu+8bo+/8JHGPRy6pnghng970DRBDkVrKzozlrnmMesdSrtuCnsgyRbE&lt;br /&gt;
        XckxaQ8S2nDYyFqBI0PkcBW8+0akdFWW58Os5cGbPFeHi6vtZCR5pWw5pnqtuoip&lt;br /&gt;
        rdk9jg1axT3vwu+RVdcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUBjNylGJBvkAY/4yI&lt;br /&gt;
        IoD00R6p5hIwWQYDVR0jBFIwUIAUBjNylGJBvkAY/4yIIoD00R6p5hKhLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAKLDsqky&lt;br /&gt;
        lLefMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAQGZUlJ3zzJvy1OLd&lt;br /&gt;
        tV3NTYHlbVHm3Fty17xqW9Ui8GE8sEWeUdHA6eURNNpNpd+gAGC6Tp+k+cU1LlPw&lt;br /&gt;
        Xm7BAATJ/2DjY8tzRc6r6EneQWRkIa8xpbvknXvUml6iFgo2ofOWLaFk6XpQ64MA&lt;br /&gt;
        O35wv9XEARNabJ9wJSRSevUigAx2U2GvaorV5PgqHImiKTSrL0K6j8B4OqXWUqP0&lt;br /&gt;
        KGf7pCdGlrq2XEl95N2zj8n/scvA9JasImztsVlZ+WxeF+OAMvWQQFc54gC6lwWc&lt;br /&gt;
        8kno8vPn3lwxVkTU0o9wcHnOhNi2hzVDV85sz7P9dOZYF73uy1uLshdjCcwlmQ2l&lt;br /&gt;
        A9OV9w==',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'saml20.sign.assertion' =&amp;gt; true,&lt;br /&gt;
   // This metadata does not contain an encryption key,&lt;br /&gt;
   // therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.&lt;br /&gt;
  'assertion.encryption' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ECP (Enhanced Client or Proxy) ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.&lt;br /&gt;
Ehhez a &amp;lt;code&amp;gt;metadata/saml20-idp-hosted.php&amp;lt;/code&amp;gt; file-ba fel kell venni az IdP metaadatai közé egy&lt;br /&gt;
&amp;lt;code&amp;gt;'saml20.ecp'&amp;lt;/code&amp;gt; elemet &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; értékkel, illetve az SP metaadatokhoz is hozzá kell&lt;br /&gt;
adni két beállítást a &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  // ...&lt;br /&gt;
  'signature.algorithm'  =&amp;gt; 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',&lt;br /&gt;
  'saml20.sign.response' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shibboleth ==&lt;br /&gt;
&lt;br /&gt;
Egy unicon/shibboleth-idp alapú docker image készítését mutatjuk be az alábbiakban.&lt;br /&gt;
&lt;br /&gt;
=== Kezdeti IdP konfiguráció ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it -v $(pwd):/ext-mount --rm unicon/shibboleth-idp init-idp.sh&lt;br /&gt;
&lt;br /&gt;
Please complete the following for your IdP environment:&lt;br /&gt;
Hostname: [64ed9b77b493.localdomain]&lt;br /&gt;
idp.example.com&lt;br /&gt;
SAML EntityID: [https://idp.example.com/idp/shibboleth]&lt;br /&gt;
https://idp.example.com:4443/idp/shibboleth&lt;br /&gt;
Attribute Scope: [localdomain]&lt;br /&gt;
example.com&lt;br /&gt;
Backchannel PKCS12 Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Cookie Encryption Key Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/bin does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/edit-webapp does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/dist does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/doc does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/system does not exist.&lt;br /&gt;
Generating Signing Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Encryption Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Backchannel keystore, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating cookie encryption key files...&lt;br /&gt;
...done&lt;br /&gt;
Rebuilding /opt/shibboleth-idp-tmp/war/idp.war ...&lt;br /&gt;
...done&lt;br /&gt;
&lt;br /&gt;
BUILD SUCCESSFUL&lt;br /&gt;
Total time: 7 minutes 4 seconds&lt;br /&gt;
A basic Shibboleth IdP config and UI has been copied to ./customized-shibboleth-idp/ (assuming the&lt;br /&gt;
default volume mapping was used).&lt;br /&gt;
Most files, if not being customized can be removed from what was exported/the local Docker image and&lt;br /&gt;
baseline files will be used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keletkezik egy &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa a következő szerkezettel:&lt;br /&gt;
&lt;br /&gt;
* conf&lt;br /&gt;
* credentials&lt;br /&gt;
* metadata&lt;br /&gt;
* views&lt;br /&gt;
* views/admin&lt;br /&gt;
* views/client-storage&lt;br /&gt;
* views/intercept&lt;br /&gt;
* webapp&lt;br /&gt;
* webapp/css&lt;br /&gt;
* webapp/images&lt;br /&gt;
&lt;br /&gt;
Az alábbi fájlokat kell majd módosítani:&lt;br /&gt;
&lt;br /&gt;
* conf/attribute-filter.xml&lt;br /&gt;
* conf/attribute-resolver.xml&lt;br /&gt;
* conf/idp.properties&lt;br /&gt;
* conf/ldap.properties&lt;br /&gt;
* conf/metadata-providers.xml&lt;br /&gt;
* conf/relying-party.xml&lt;br /&gt;
* conf/saml-nameid.properties&lt;br /&gt;
* conf/saml-nameid.xml&lt;br /&gt;
* metadata/idp-metadata.xml&lt;br /&gt;
&lt;br /&gt;
Néhány másik fájlt pedig létre kell hozni:&lt;br /&gt;
&lt;br /&gt;
* credentials/idp-browser.p12 (webserver SSL key/cert)&lt;br /&gt;
* credentials/ldap-server.crt (LDAP server certificate)&lt;br /&gt;
* metadata/federationmetadata.xml (Office 365 federation metadata)&lt;br /&gt;
&lt;br /&gt;
Mivel ebben a példában az IdP-t a 4443-as porton fogjuk elérni, ezért ellenőrizni kell minden &amp;lt;code&amp;gt;Location&amp;lt;/code&amp;gt; paramétert a &amp;lt;code&amp;gt;metadata/idp-metadata.xml&amp;lt;/code&amp;gt; fájlban, hogy jó helyre mutat-e. Továbbá engedélyezni kell a &amp;lt;code&amp;gt;SingleLogoutService&amp;lt;/code&amp;gt; bejegyzéseket (amelyek alapból ki vannak iktatva).&lt;br /&gt;
&lt;br /&gt;
=== A webszerver tanúsítvány előkészítése ===&lt;br /&gt;
&lt;br /&gt;
A felhasználók által látogatott oldalakhoz célszerű valamilyen hitelesítés szolgáltató által aláírt tanúsítványt használni. Másoljuk be a webszerver tanúsítványt, a tanúsítvány láncot és a szerver kulcsot PEM formátumban egy mappába, majd egyesítsük őket egyetlen p12-es fáljba az openssl segítségével:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat webserver.crt intermediate_ca.crt &amp;gt; cert-chain.txt&lt;br /&gt;
# openssl pkcs12 -export -inkey webserver.key -in cert-chain.txt -out idp-browser.p12&lt;br /&gt;
Enter Export Password: XXX_secret_XXX&lt;br /&gt;
Verifying - Enter Export Password: XXX_secret_XXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az előállított &amp;lt;code&amp;gt;idp-browser.p12&amp;lt;/code&amp;gt; fájlt másoljuk be a &amp;lt;code&amp;gt;credentials&amp;lt;/code&amp;gt; mappába.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft SAML SP metadata és föderációs beállítások ===&lt;br /&gt;
&lt;br /&gt;
Töltsük le a Microsoft SAML2 SP metaadatait a &amp;lt;code&amp;gt;metadata&amp;lt;/code&amp;gt; könyvtárba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# wget https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsünk egy MetadataProvider-t a &amp;lt;code&amp;gt;conf/metadata-providers.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;MetadataProvider id=&amp;quot;MicrosoftOnline&amp;quot;&lt;br /&gt;
                  xsi:type=&amp;quot;FilesystemMetadataProvider&amp;quot;&lt;br /&gt;
                  metadataFile=&amp;quot;%{idp.home}/metadata/federationmetadata.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;conf/relying-party.xml&amp;lt;/code&amp;gt; fájlban néhány speciális beállítást kell eszközölnünk, hogy a föderáció működjön (a shibboleth.RelyingPartyOverrides szekció alatt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.RelyingPartyOverrides&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;bean parent=&amp;quot;RelyingPartyByName&amp;quot; c:relyingPartyIds=&amp;quot;urn:federation:MicrosoftOnline&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;profileConfigurations&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;list&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.SSO&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.ECP&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:signAssertions=&amp;quot;true&amp;quot;&lt;br /&gt;
              p:signResponses=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:nameIDFormatPrecedence=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az Office 365 megköveteli a SAML2 &amp;lt;code&amp;gt;NameID&amp;lt;/code&amp;gt; használatát, amiben ugyanazt az értéket várja, mint ami az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; attribútumban van. Ezt a &amp;lt;code&amp;gt;conf/saml-nameid.xml&amp;lt;/code&amp;gt; fájlban kell beállítani:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- SAML 2 NameID Generation --&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.SAML2NameIDGenerators&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2TransientGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for all entities except Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.NOT&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
              c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
    &amp;lt;/bean&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2AttributeSourcedGenerator&amp;quot;&lt;br /&gt;
      p:format=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot;&lt;br /&gt;
      p:attributeSourceIds=&amp;quot;#{ {'ImmutableID'} }&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
          c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LDAP adatforrás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Mentsük el az LDAP szerver tanúsítványát PEM formátumban a &amp;lt;code&amp;gt;credentials/ldap-server.crt&amp;lt;/code&amp;gt; fájlba.&lt;br /&gt;
&lt;br /&gt;
Az Office 365 két attriútum kiadását kéri: &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; értékének meg kell egyeznie a felhasználó Office 365-ös &amp;lt;code&amp;gt;UserPrincipalName&amp;lt;/code&amp;gt; attribútumával (ami egyben a hivatalos (elsődleges) felhős email címe).&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; esetünkben az &amp;lt;code&amp;gt;eduPerosnPrincilapName&amp;lt;/code&amp;gt; MD5 hash értékének UUID formátumra konvertált változata lesz, amelyet egy javasccript segítségével képezünk.&lt;br /&gt;
&lt;br /&gt;
Cseréljük le a &amp;lt;code&amp;gt;conf/attribute-resolver.xml&amp;lt;/code&amp;gt; fájlt a &amp;lt;code&amp;gt;conf/attribute-resolver-full.xml&amp;lt;/code&amp;gt; nevűvel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# mv conf/attribute-resolver-full.xml conf/attribute-resolver.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;attribute-resolver.xml&amp;lt;/code&amp;gt; fájlban beállítunk néhány attribútumot és az LDAP adatforrást. Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; egy Shibboleth &amp;lt;code&amp;gt;ScriptedAttribute&amp;lt;/code&amp;gt; lesz, ami egy javasccript segítségével fogja előállítani az attribútum értékét az &amp;lt;code&amp;gt;eduPersonPrincipalName&amp;lt;/code&amp;gt; LDAP attribútumot felhasználva. Az MD5 hash kiszámítása külső segítség nélkül történik, ezért a script kissé hosszú.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeResolver&lt;br /&gt;
        xmlns=&amp;quot;urn:mace:shibboleth:2.0:resolver&amp;quot;&lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
        xsi:schemaLocation=&amp;quot;urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Attribute Definitions                 --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;uid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;uid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.1&amp;quot; friendlyName=&amp;quot;uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;mail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.3&amp;quot; friendlyName=&amp;quot;mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Prescoped&amp;quot; id=&amp;quot;eduPersonPrincipalName&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1ScopedString&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2ScopedString&amp;quot; name=&amp;quot;urn:oid:1.3.6.1.4.1.5923.1.1.1.6&amp;quot; friendlyName=&amp;quot;eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; friendlyName=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;ScriptedAttribute&amp;quot; id=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          friendlyName=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;Script&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
var MD5 = function(d) {&lt;br /&gt;
  var r = M(V(Y(X(d),8*d.length)));&lt;br /&gt;
  return r.toLowerCase()&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function M(d) {&lt;br /&gt;
  for(var _,m=&amp;quot;0123456789ABCDEF&amp;quot;,f=&amp;quot;&amp;quot;,r=0;r&amp;lt;d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_&amp;gt;&amp;gt;&amp;gt;4&amp;amp;15)+m.charAt(15&amp;amp;_);&lt;br /&gt;
  return f&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function X(d) {&lt;br /&gt;
  for(var _=Array(d.length&amp;gt;&amp;gt;2),m=0;m&amp;lt;_.length;m++)_[m]=0;&lt;br /&gt;
  for(m=0;m&amp;lt;8*d.length;m+=8)_[m&amp;gt;&amp;gt;5]|=(255&amp;amp;d.charCodeAt(m/8))&amp;lt;&amp;lt;m%32;&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function V(d) {&lt;br /&gt;
  for(var _=&amp;quot;&amp;quot;,m=0;m&amp;lt;32*d.length;m+=8)_+=String.fromCharCode(d[m&amp;gt;&amp;gt;5]&amp;gt;&amp;gt;&amp;gt;m%32&amp;amp;255);&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Y(d,_) {&lt;br /&gt;
  d[_&amp;gt;&amp;gt;5]|=128&amp;lt;&amp;lt;_%32,d[14+(_+64&amp;gt;&amp;gt;&amp;gt;9&amp;lt;&amp;lt;4)]=_;&lt;br /&gt;
  for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n&amp;lt;d.length;n+=16) {&lt;br /&gt;
    var h=m,t=f,g=r,e=i;&lt;br /&gt;
    f=md5_ii(&lt;br /&gt;
      f=md5_ii(&lt;br /&gt;
        f=md5_ii(&lt;br /&gt;
          f=md5_ii(&lt;br /&gt;
            f=md5_hh(&lt;br /&gt;
              f=md5_hh(&lt;br /&gt;
                f=md5_hh(&lt;br /&gt;
                  f=md5_hh(&lt;br /&gt;
                    f=md5_gg(&lt;br /&gt;
                      f=md5_gg(&lt;br /&gt;
                        f=md5_gg(&lt;br /&gt;
                          f=md5_gg(&lt;br /&gt;
                            f=md5_ff(&lt;br /&gt;
                              f=md5_ff(&lt;br /&gt;
                                f=md5_ff(&lt;br /&gt;
                                  f=md5_ff(&lt;br /&gt;
                                    f,r=md5_ff(&lt;br /&gt;
                                      r,i=md5_ff(&lt;br /&gt;
                                        i,m=md5_ff(&lt;br /&gt;
                                          m,f,r,i,d[n+0],7,-680876936&lt;br /&gt;
                                        ),f,r,d[n+1],12,-389564586&lt;br /&gt;
                                      ),m,f,d[n+2],17,606105819&lt;br /&gt;
                                    ),i,m,d[n+3],22,-1044525330&lt;br /&gt;
                                  ),r=md5_ff(&lt;br /&gt;
                                    r,i=md5_ff(&lt;br /&gt;
                                      i,m=md5_ff(&lt;br /&gt;
                                        m,f,r,i,d[n+4],7,-176418897&lt;br /&gt;
                                      ),f,r,d[n+5],12,1200080426&lt;br /&gt;
                                    ),m,f,d[n+6],17,-1473231341&lt;br /&gt;
                                  ),i,m,d[n+7],22,-45705983&lt;br /&gt;
                                ),r=md5_ff(&lt;br /&gt;
                                  r,i=md5_ff(&lt;br /&gt;
                                    i,m=md5_ff(&lt;br /&gt;
                                      m,f,r,i,d[n+8],7,1770035416&lt;br /&gt;
                                    ),f,r,d[n+9],12,-1958414417&lt;br /&gt;
                                  ),m,f,d[n+10],17,-42063&lt;br /&gt;
                                ),i,m,d[n+11],22,-1990404162&lt;br /&gt;
                              ),r=md5_ff(&lt;br /&gt;
                                r,i=md5_ff(&lt;br /&gt;
                                  i,m=md5_ff(&lt;br /&gt;
                                    m,f,r,i,d[n+12],7,1804603682&lt;br /&gt;
                                  ),f,r,d[n+13],12,-40341101&lt;br /&gt;
                                ),m,f,d[n+14],17,-1502002290&lt;br /&gt;
                              ),i,m,d[n+15],22,1236535329&lt;br /&gt;
                            ),r=md5_gg(&lt;br /&gt;
                              r,i=md5_gg(&lt;br /&gt;
                                i,m=md5_gg(&lt;br /&gt;
                                  m,f,r,i,d[n+1],5,-165796510&lt;br /&gt;
                                ),f,r,d[n+6],9,-1069501632&lt;br /&gt;
                              ),m,f,d[n+11],14,643717713&lt;br /&gt;
                            ),i,m,d[n+0],20,-373897302&lt;br /&gt;
                          ),r=md5_gg(&lt;br /&gt;
                            r,i=md5_gg(&lt;br /&gt;
                              i,m=md5_gg(&lt;br /&gt;
                                m,f,r,i,d[n+5],5,-701558691&lt;br /&gt;
                              ),f,r,d[n+10],9,38016083&lt;br /&gt;
                            ),m,f,d[n+15],14,-660478335&lt;br /&gt;
                          ),i,m,d[n+4],20,-405537848&lt;br /&gt;
                        ),r=md5_gg(&lt;br /&gt;
                          r,i=md5_gg(&lt;br /&gt;
                            i,m=md5_gg(&lt;br /&gt;
                              m,f,r,i,d[n+9],5,568446438&lt;br /&gt;
                            ),f,r,d[n+14],9,-1019803690&lt;br /&gt;
                          ),m,f,d[n+3],14,-187363961&lt;br /&gt;
                        ),i,m,d[n+8],20,1163531501&lt;br /&gt;
                      ),r=md5_gg(&lt;br /&gt;
                        r,i=md5_gg(&lt;br /&gt;
                          i,m=md5_gg(&lt;br /&gt;
                            m,f,r,i,d[n+13],5,-1444681467&lt;br /&gt;
                          ),f,r,d[n+2],9,-51403784&lt;br /&gt;
                        ),m,f,d[n+7],14,1735328473&lt;br /&gt;
                      ),i,m,d[n+12],20,-1926607734&lt;br /&gt;
                    ),r=md5_hh(&lt;br /&gt;
                      r,i=md5_hh(&lt;br /&gt;
                        i,m=md5_hh(&lt;br /&gt;
                          m,f,r,i,d[n+5],4,-378558&lt;br /&gt;
                        ),f,r,d[n+8],11,-2022574463&lt;br /&gt;
                      ),m,f,d[n+11],16,1839030562&lt;br /&gt;
                    ),i,m,d[n+14],23,-35309556&lt;br /&gt;
                  ),r=md5_hh(&lt;br /&gt;
                    r,i=md5_hh(&lt;br /&gt;
                      i,m=md5_hh(&lt;br /&gt;
                        m,f,r,i,d[n+1],4,-1530992060&lt;br /&gt;
                      ),f,r,d[n+4],11,1272893353&lt;br /&gt;
                    ),m,f,d[n+7],16,-155497632&lt;br /&gt;
                  ),i,m,d[n+10],23,-1094730640&lt;br /&gt;
                ),r=md5_hh(&lt;br /&gt;
                  r,i=md5_hh(&lt;br /&gt;
                    i,m=md5_hh(&lt;br /&gt;
                      m,f,r,i,d[n+13],4,681279174&lt;br /&gt;
                    ),f,r,d[n+0],11,-358537222&lt;br /&gt;
                  ),m,f,d[n+3],16,-722521979&lt;br /&gt;
                ),i,m,d[n+6],23,76029189&lt;br /&gt;
              ),r=md5_hh(&lt;br /&gt;
                r,i=md5_hh(&lt;br /&gt;
                  i,m=md5_hh(&lt;br /&gt;
                    m,f,r,i,d[n+9],4,-640364487&lt;br /&gt;
                  ),f,r,d[n+12],11,-421815835&lt;br /&gt;
                ),m,f,d[n+15],16,530742520&lt;br /&gt;
              ),i,m,d[n+2],23,-995338651&lt;br /&gt;
            ),r=md5_ii(&lt;br /&gt;
              r,i=md5_ii(&lt;br /&gt;
                i,m=md5_ii(&lt;br /&gt;
                  m,f,r,i,d[n+0],6,-198630844&lt;br /&gt;
                ),f,r,d[n+7],10,1126891415&lt;br /&gt;
              ),m,f,d[n+14],15,-1416354905&lt;br /&gt;
            ),i,m,d[n+5],21,-57434055&lt;br /&gt;
          ),r=md5_ii(&lt;br /&gt;
            r,i=md5_ii(&lt;br /&gt;
              i,m=md5_ii(&lt;br /&gt;
                m,f,r,i,d[n+12],6,1700485571&lt;br /&gt;
              ),f,r,d[n+3],10,-1894986606&lt;br /&gt;
            ),m,f,d[n+10],15,-1051523&lt;br /&gt;
          ),i,m,d[n+1],21,-2054922799&lt;br /&gt;
        ),r=md5_ii(&lt;br /&gt;
          r,i=md5_ii(&lt;br /&gt;
            i,m=md5_ii(&lt;br /&gt;
              m,f,r,i,d[n+8],6,1873313359&lt;br /&gt;
            ),f,r,d[n+15],10,-30611744&lt;br /&gt;
          ),m,f,d[n+6],15,-1560198380&lt;br /&gt;
        ),i,m,d[n+13],21,1309151649&lt;br /&gt;
      ),r=md5_ii(&lt;br /&gt;
        r,i=md5_ii(&lt;br /&gt;
          i,m=md5_ii(&lt;br /&gt;
            m,f,r,i,d[n+4],6,-145523070&lt;br /&gt;
          ),f,r,d[n+11],10,-1120210379&lt;br /&gt;
        ),m,f,d[n+2],15,718787259&lt;br /&gt;
      ),i,m,d[n+9],21,-343485551&lt;br /&gt;
    ),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)&lt;br /&gt;
  }&lt;br /&gt;
  return Array(m,f,r,i)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_cmn(d,_,m,f,r,i) {&lt;br /&gt;
  return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ff(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;m|~_&amp;amp;f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_gg(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;f|m&amp;amp;~f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_hh(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_^m^f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ii(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(m^(_|~f),d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function safe_add(d,_) {&lt;br /&gt;
  var m=(65535&amp;amp;d)+(65535&amp;amp;_);&lt;br /&gt;
  return(d&amp;gt;&amp;gt;16)+(_&amp;gt;&amp;gt;16)+(m&amp;gt;&amp;gt;16)&amp;lt;&amp;lt;16|65535&amp;amp;m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function bit_rol(d,_) {&lt;br /&gt;
  return d&amp;lt;&amp;lt;_|d&amp;gt;&amp;gt;&amp;gt;32-_&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var UUID = function(s) {&lt;br /&gt;
  return s.substring(0,8) + '-' + s.substring(8,12) + '-' + s.substring(12,16) + '-' + s.substring(16,20) + '-' + s.substring(20)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
ImmutableID.addValue(UUID(MD5(eduPersonPrincipalName.getValues().get(0))));&lt;br /&gt;
        ]]&amp;gt;&amp;lt;/Script&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Data Connectors                       --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;myLDAP&amp;quot; xsi:type=&amp;quot;LDAPDirectory&amp;quot;&lt;br /&gt;
        ldapURL=&amp;quot;%{idp.attribute.resolver.LDAP.ldapURL}&amp;quot;&lt;br /&gt;
        baseDN=&amp;quot;%{idp.attribute.resolver.LDAP.baseDN}&amp;quot; &lt;br /&gt;
        principal=&amp;quot;%{idp.attribute.resolver.LDAP.bindDN}&amp;quot;&lt;br /&gt;
        principalCredential=&amp;quot;%{idp.attribute.resolver.LDAP.bindDNCredential}&amp;quot;&lt;br /&gt;
        useStartTLS=&amp;quot;%{idp.attribute.resolver.LDAP.useStartTLS:true}&amp;quot;&lt;br /&gt;
        connectTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.connectTimeout}&amp;quot;&lt;br /&gt;
                trustFile=&amp;quot;%{idp.attribute.resolver.LDAP.trustCertificates}&amp;quot;&lt;br /&gt;
        responseTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.responseTimeout}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;![CDATA[&lt;br /&gt;
                %{idp.attribute.resolver.LDAP.searchFilter}&lt;br /&gt;
            ]]&amp;gt;&lt;br /&gt;
        &amp;lt;/FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;ConnectionPool&lt;br /&gt;
            minPoolSize=&amp;quot;%{idp.pool.LDAP.minSize:3}&amp;quot;&lt;br /&gt;
            maxPoolSize=&amp;quot;%{idp.pool.LDAP.maxSize:10}&amp;quot;&lt;br /&gt;
            blockWaitTime=&amp;quot;%{idp.pool.LDAP.blockWaitTime:PT3S}&amp;quot;&lt;br /&gt;
            validatePeriodically=&amp;quot;%{idp.pool.LDAP.validatePeriodically:true}&amp;quot;&lt;br /&gt;
            validateTimerPeriod=&amp;quot;%{idp.pool.LDAP.validatePeriod:PT5M}&amp;quot;&lt;br /&gt;
            expirationTime=&amp;quot;%{idp.pool.LDAP.idleTime:PT10M}&amp;quot;&lt;br /&gt;
            failFastInitialize=&amp;quot;%{idp.pool.LDAP.failFastInitialize:false}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;computed&amp;quot; xsi:type=&amp;quot;ComputedId&amp;quot;&lt;br /&gt;
                   generatedAttributeID=&amp;quot;computedId&amp;quot;&lt;br /&gt;
                   salt=&amp;quot;%{idp.persistentId.salt}&amp;quot;&lt;br /&gt;
                   algorithm=&amp;quot;%{idp.persistentId.algorithm:SHA}&amp;quot;&lt;br /&gt;
                   encoding=&amp;quot;%{idp.persistentId.encoding:BASE32}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;%{idp.persistentId.sourceAttribute}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeResolver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha anonymous LDAP keresést akarunk használni, akkor a &amp;lt;code&amp;gt;principal&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;principalCredential&amp;lt;/code&amp;gt; paramétereket törölni kell a myLDAP DataConnector-ból.&lt;br /&gt;
&lt;br /&gt;
=== Attribútum kiadás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Az IdP-nek ki kell adnia az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; és az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; attribútumokat a Microsoft-nak. Ezért létre kell hozni egy új &amp;lt;code&amp;gt;AttributeFilterPolicy&amp;lt;/code&amp;gt; szabályt a &amp;lt;code&amp;gt;conf/attribute-filter.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Office 365 ImmutableID and IDPEmail --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeFilterPolicy id=&amp;quot;PolicyForWindowsAzureAD&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;PolicyRequirementRule xsi:type=&amp;quot;Requester&amp;quot; value=&amp;quot;urn:federation:MicrosoftOnline&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeFilterPolicy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A properties fájlok beállításai ===&lt;br /&gt;
&lt;br /&gt;
'''conf/idp.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.session.StorageService = shibboleth.StorageService&lt;br /&gt;
idp.session.trackSPSessions = true&lt;br /&gt;
idp.session.secondaryServiceIndex = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/ldap.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.authn.LDAP.ldapURL = ldap://ldap.example.com&lt;br /&gt;
idp.authn.LDAP.useStartTLS = true&lt;br /&gt;
idp.authn.LDAP.sslConfig = certificateTrust&lt;br /&gt;
# idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore&lt;br /&gt;
idp.authn.LDAP.returnAttributes = uid,mail,eduPersonPrincipalName&lt;br /&gt;
idp.authn.LDAP.baseDN = ou=People,dc=example,dc=com&lt;br /&gt;
idp.authn.LDAP.userFilter = (|(uid={user})(mail={user}))&lt;br /&gt;
# idp.authn.LDAP.bindDN = uid=myservice,ou=system&lt;br /&gt;
# idp.authn.LDAP.bindDNCredential = myServicePassword&lt;br /&gt;
idp.authn.LDAP.dnFormat = uid=%s,ou=People,dc=example,dc=com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/saml-nameid.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.nameid.saml2.default = urn:oasis:names:tc:SAML:2.0:nameid-format:transient&lt;br /&gt;
idp.nameid.saml1.default = urn:mace:shibboleth:1.0:nameIdentifier&lt;br /&gt;
idp.transientId.generator = shibboleth.CryptoTransientIdGenerator&lt;br /&gt;
idp.persistentId.sourceAttribute = eduPersonPrincipalName&lt;br /&gt;
idp.persistentId.useUnfilteredAttributes = true&lt;br /&gt;
idp.persistentId.salt = XXX_secret_salt_XXX&lt;br /&gt;
idp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Docker image készítése ===&lt;br /&gt;
&lt;br /&gt;
Hozzunk létre egy &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;-t ott, ahol a &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa található, az alábbi tartalommal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FROM       unicon/shibboleth-idp&lt;br /&gt;
MAINTAINER John Doe &amp;lt;john.doe@example.com&amp;gt;&lt;br /&gt;
ADD        customized-shibboleth-idp/ /opt/shibboleth-idp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsük el az image fájlt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker build -t example-com/idp-shib .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indítsuk el az új IdP-t. A 4443-as és 8443-as portokat adjuk ki, és ne feledjük az előzőleg az SSL kulcsok számára beállított jelszavakat sem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it --rm \&lt;br /&gt;
  -p 4443:4443 \&lt;br /&gt;
  -p 8443:8443 \&lt;br /&gt;
  --network bridge \&lt;br /&gt;
  -e JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  -e JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  example-com/idp-shib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hibakeresés ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;conf/idp.properties&amp;lt;/code&amp;gt; fájlban megadható loglevel beállítások részletes hibakeresést tesznek lehetővé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Default value !! Description&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.idp        || INFO  || Log level for the IdP proper&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.ldap       || WARN  || Log level for LDAP events&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.messages   || INFO  || Set to DEBUG for protocol message tracing&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.encryption || INFO  || Set to DEBUG to log cleartext versions of encrypted content&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.opensaml   || INFO  || Log level for OpenSAML library classes&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.props      || INFO  || Set to DEBUG to log runtime properties during startup&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.spring     || ERROR || Log level for Spring Framework (very chatty)&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.container  || ERROR || Log level for Tomcat/Jetty (very chatty)&lt;br /&gt;
|-&lt;br /&gt;
|idp.loglevel.xmlsec     || INFO  || Set to DEBUG for low-level XML Signing/Encryption logging&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== További leírások ===&lt;br /&gt;
&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]&lt;br /&gt;
* [https://wiki.sunet.se/display/SWAMID/How+to+use+Shibboleth+Identity+Provider+v3+with+Office+365 How to use Shibboleth Identity Provider v3 with Office 365]&lt;br /&gt;
&lt;br /&gt;
[[Category: AAI]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SimpleSAMLphp]]&lt;br /&gt;
[[Category: Shibboleth]]&lt;/div&gt;</summary>
		<author><name>Ecsedi(AT)unideb.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4553</id>
		<title>O365 SAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4553"/>
				<updated>2020-02-26T06:28:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ecsedi(AT)unideb.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az Office365 szolgáltatások SAML azonosítással történő használatához egy új SP-t kell konfigurálni az IdP konfigurációjában, mivel ez az SP nem szerepel a föderációs metaadatok között. A Microsoft által üzemeltetett SP-nek speciális attribútum igényei vannak:&lt;br /&gt;
* perzisztens NameID-t kell küldeni ('''ImmutableID''')&lt;br /&gt;
* kell küldeni egy '''IDPEmail''' nevű attribútumot&lt;br /&gt;
&lt;br /&gt;
== Kiadott attribútumok ==&lt;br /&gt;
=== ImmutableID ===&lt;br /&gt;
Az ImmutableID az eduPersonPrincipalName attribútum MD5 hashének UUID formátumra konvertált változata.&lt;br /&gt;
&lt;br /&gt;
=== IDPEmail ===&lt;br /&gt;
A kiadott e-mail értéknek meg kell egyeznie az Office365 által szolgáltatott e-mail címmel. Ez azt is jelenti, hogy az IdP-től kapott e-mail attribútum domain részét előzetesen validálni kell az Office365-ben.&lt;br /&gt;
&lt;br /&gt;
== SimpleSAMLphp ==&lt;br /&gt;
A &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ba kell elhelyezni a következő bejegyzést:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  'entityid' =&amp;gt; 'urn:federation:MicrosoftOnline',&lt;br /&gt;
&lt;br /&gt;
  // Expose both required attributes &lt;br /&gt;
  'attributes' =&amp;gt; array('IDPEmail', 'ImmutableID'),&lt;br /&gt;
  'attributes.NameFormat' =&amp;gt; &amp;quot;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  // Configure attribute mapping and ImmutableID generation&lt;br /&gt;
  'authproc' =&amp;gt; array(&lt;br /&gt;
    31 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:PHP',&lt;br /&gt;
      'code' =&amp;gt; '&lt;br /&gt;
        $eppn = $attributes[&amp;quot;eduPersonPrincipalName&amp;quot;][0];&lt;br /&gt;
        $chunks = str_split(md5($eppn), 4);        &lt;br /&gt;
        $attributes[&amp;quot;ImmutableID&amp;quot;][0] = vsprintf(&amp;quot;%s%s-%s-%s-%s-%s%s%s&amp;quot;, $chunks);&lt;br /&gt;
      ',&lt;br /&gt;
    ),&lt;br /&gt;
        36 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:AttributeMap',&lt;br /&gt;
      'mail' =&amp;gt; 'IDPEmail',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  // Send ImmutableID as a &amp;quot;persistent&amp;quot; NameID&lt;br /&gt;
  'NameIDFormat' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',&lt;br /&gt;
  'simplesaml.nameidattribute' =&amp;gt; 'ImmutableID',&lt;br /&gt;
&lt;br /&gt;
  'contacts' =&amp;gt; array(),&lt;br /&gt;
  'metadata-set' =&amp;gt; 'saml20-sp-remote',&lt;br /&gt;
&lt;br /&gt;
  'AssertionConsumerService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 0,&lt;br /&gt;
      'isDefault' =&amp;gt; true,&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 1,&lt;br /&gt;
    ),&lt;br /&gt;
    2 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:PAOS',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 2,&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'SingleLogoutService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt;&lt;br /&gt;
    array(&lt;br /&gt;
    'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
    'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  'keys' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUz&lt;br /&gt;
        NDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYD&lt;br /&gt;
        KgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8&lt;br /&gt;
        fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0&lt;br /&gt;
        eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B&lt;br /&gt;
        5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4b&lt;br /&gt;
        PPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mM&lt;br /&gt;
        UqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQ&lt;br /&gt;
        s6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyv&lt;br /&gt;
        f2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52W&lt;br /&gt;
        oM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tq&lt;br /&gt;
        zHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpx&lt;br /&gt;
        SDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYi&lt;br /&gt;
        kA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5q&lt;br /&gt;
        K3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx&lt;br /&gt;
        2ZDQaQ==',&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJAKLDsqkylLefMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDEwMTAxODE2&lt;br /&gt;
        MTNaFw0xOTEwMDkxODE2MTNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7A&lt;br /&gt;
        3m6uvOxEsX+NlB1hnflaR8DJj597wY3qyh/FX4O6rKvU2leAfINmBWcjEFApCKi9&lt;br /&gt;
        p5uIaZpNlDpPQ+R3BaZx+4NhHbOMpeWlpIiZHL61lwbulzurffUPhtzQNHAVzOBk&lt;br /&gt;
        ZsOgN9BD/hOleU//d+IXz08ateUb3Ip2vyaodilYQDDi5M9yOhanv1cO1Usjo2xT&lt;br /&gt;
        LfiK+TVygu+8bo+/8JHGPRy6pnghng970DRBDkVrKzozlrnmMesdSrtuCnsgyRbE&lt;br /&gt;
        XckxaQ8S2nDYyFqBI0PkcBW8+0akdFWW58Os5cGbPFeHi6vtZCR5pWw5pnqtuoip&lt;br /&gt;
        rdk9jg1axT3vwu+RVdcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUBjNylGJBvkAY/4yI&lt;br /&gt;
        IoD00R6p5hIwWQYDVR0jBFIwUIAUBjNylGJBvkAY/4yIIoD00R6p5hKhLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAKLDsqky&lt;br /&gt;
        lLefMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAQGZUlJ3zzJvy1OLd&lt;br /&gt;
        tV3NTYHlbVHm3Fty17xqW9Ui8GE8sEWeUdHA6eURNNpNpd+gAGC6Tp+k+cU1LlPw&lt;br /&gt;
        Xm7BAATJ/2DjY8tzRc6r6EneQWRkIa8xpbvknXvUml6iFgo2ofOWLaFk6XpQ64MA&lt;br /&gt;
        O35wv9XEARNabJ9wJSRSevUigAx2U2GvaorV5PgqHImiKTSrL0K6j8B4OqXWUqP0&lt;br /&gt;
        KGf7pCdGlrq2XEl95N2zj8n/scvA9JasImztsVlZ+WxeF+OAMvWQQFc54gC6lwWc&lt;br /&gt;
        8kno8vPn3lwxVkTU0o9wcHnOhNi2hzVDV85sz7P9dOZYF73uy1uLshdjCcwlmQ2l&lt;br /&gt;
        A9OV9w==',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'saml20.sign.assertion' =&amp;gt; true,&lt;br /&gt;
   // This metadata does not contain an encryption key,&lt;br /&gt;
   // therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.&lt;br /&gt;
  'assertion.encryption' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ECP (Enhanced Client or Proxy) ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.&lt;br /&gt;
Ehhez a &amp;lt;code&amp;gt;metadata/saml20-idp-hosted.php&amp;lt;/code&amp;gt; file-ba fel kell venni az IdP metaadatai közé egy&lt;br /&gt;
&amp;lt;code&amp;gt;'saml20.ecp'&amp;lt;/code&amp;gt; elemet &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; értékkel, illetve az SP metaadatokhoz is hozzá kell&lt;br /&gt;
adni két beállítást a &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  // ...&lt;br /&gt;
  'signature.algorithm'  =&amp;gt; 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',&lt;br /&gt;
  'saml20.sign.response' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shibboleth ==&lt;br /&gt;
&lt;br /&gt;
Egy unicon/shibboleth-idp alapú docker image készítését mutatjuk be az alábbiakban.&lt;br /&gt;
&lt;br /&gt;
=== Kezdeti IdP konfiguráció ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it -v $(pwd):/ext-mount --rm unicon/shibboleth-idp init-idp.sh&lt;br /&gt;
&lt;br /&gt;
Please complete the following for your IdP environment:&lt;br /&gt;
Hostname: [64ed9b77b493.localdomain]&lt;br /&gt;
idp.example.com&lt;br /&gt;
SAML EntityID: [https://idp.example.com/idp/shibboleth]&lt;br /&gt;
https://idp.example.com:4443/idp/shibboleth&lt;br /&gt;
Attribute Scope: [localdomain]&lt;br /&gt;
example.com&lt;br /&gt;
Backchannel PKCS12 Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Cookie Encryption Key Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/bin does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/edit-webapp does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/dist does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/doc does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/system does not exist.&lt;br /&gt;
Generating Signing Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Encryption Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Backchannel keystore, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating cookie encryption key files...&lt;br /&gt;
...done&lt;br /&gt;
Rebuilding /opt/shibboleth-idp-tmp/war/idp.war ...&lt;br /&gt;
...done&lt;br /&gt;
&lt;br /&gt;
BUILD SUCCESSFUL&lt;br /&gt;
Total time: 7 minutes 4 seconds&lt;br /&gt;
A basic Shibboleth IdP config and UI has been copied to ./customized-shibboleth-idp/ (assuming the&lt;br /&gt;
default volume mapping was used).&lt;br /&gt;
Most files, if not being customized can be removed from what was exported/the local Docker image and&lt;br /&gt;
baseline files will be used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keletkezik egy &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa a következő szerkezettel:&lt;br /&gt;
&lt;br /&gt;
* conf&lt;br /&gt;
* credentials&lt;br /&gt;
* metadata&lt;br /&gt;
* views&lt;br /&gt;
* views/admin&lt;br /&gt;
* views/client-storage&lt;br /&gt;
* views/intercept&lt;br /&gt;
* webapp&lt;br /&gt;
* webapp/css&lt;br /&gt;
* webapp/images&lt;br /&gt;
&lt;br /&gt;
Az alábbi fájlokat kell majd módosítani:&lt;br /&gt;
&lt;br /&gt;
* conf/attribute-filter.xml&lt;br /&gt;
* conf/attribute-resolver.xml&lt;br /&gt;
* conf/idp.properties&lt;br /&gt;
* conf/ldap.properties&lt;br /&gt;
* conf/metadata-providers.xml&lt;br /&gt;
* conf/relying-party.xml&lt;br /&gt;
* conf/saml-nameid.properties&lt;br /&gt;
* conf/saml-nameid.xml&lt;br /&gt;
* metadata/idp-metadata.xml&lt;br /&gt;
&lt;br /&gt;
Néhány másik fájlt pedig létre kell hozni:&lt;br /&gt;
&lt;br /&gt;
* credentials/idp-browser.p12 (webserver SSL key/cert)&lt;br /&gt;
* credentials/ldap-server.crt (LDAP server certificate)&lt;br /&gt;
* metadata/federationmetadata.xml (Office 365 federation metadata)&lt;br /&gt;
&lt;br /&gt;
Mivel ebben a példában az IdP-t a 4443-as porton fogjuk elérni, ezért ellenőrizni kell minden &amp;lt;code&amp;gt;Location&amp;lt;/code&amp;gt; paramétert a &amp;lt;code&amp;gt;metadata/idp-metadata.xml&amp;lt;/code&amp;gt; fájlban, hogy jó helyre mutat-e. Továbbá engedélyezni kell a &amp;lt;code&amp;gt;SingleLogoutService&amp;lt;/code&amp;gt; bejegyzéseket (amelyek alapból ki vannak iktatva).&lt;br /&gt;
&lt;br /&gt;
=== A webszerver tanúsítvány előkészítése ===&lt;br /&gt;
&lt;br /&gt;
A felhasználók által látogatott oldalakhoz célszerű valamilyen hitelesítés szolgáltató által aláírt tanúsítványt használni. Másoljuk be a webszerver tanúsítványt, a tanúsítvány láncot és a szerver kulcsot PEM formátumban egy mappába, majd egyesítsük őket egyetlen p12-es fáljba az openssl segítségével:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat webserver.crt intermediate_ca.crt &amp;gt; cert-chain.txt&lt;br /&gt;
# openssl pkcs12 -export -inkey webserver.key -in cert-chain.txt -out idp-browser.p12&lt;br /&gt;
Enter Export Password: XXX_secret_XXX&lt;br /&gt;
Verifying - Enter Export Password: XXX_secret_XXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az előállított &amp;lt;code&amp;gt;idp-browser.p12&amp;lt;/code&amp;gt; fájlt másoljuk be a &amp;lt;code&amp;gt;credentials&amp;lt;/code&amp;gt; mappába.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft SAML SP metadata és föderációs beállítások ===&lt;br /&gt;
&lt;br /&gt;
Töltsük le a Microsoft SAML2 SP metaadatait a &amp;lt;code&amp;gt;metadata&amp;lt;/code&amp;gt; könyvtárba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# wget https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsünk egy MetadataProvider-t a &amp;lt;code&amp;gt;conf/metadata-providers.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;MetadataProvider id=&amp;quot;MicrosoftOnline&amp;quot;&lt;br /&gt;
                  xsi:type=&amp;quot;FilesystemMetadataProvider&amp;quot;&lt;br /&gt;
                  metadataFile=&amp;quot;%{idp.home}/metadata/federationmetadata.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;conf/relying-party.xml&amp;lt;/code&amp;gt; fájlban néhány speciális beállítást kell eszközölnünk, hogy a föderáció működjön (a shibboleth.RelyingPartyOverrides szekció alatt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.RelyingPartyOverrides&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;bean parent=&amp;quot;RelyingPartyByName&amp;quot; c:relyingPartyIds=&amp;quot;urn:federation:MicrosoftOnline&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;profileConfigurations&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;list&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.SSO&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.ECP&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:signAssertions=&amp;quot;true&amp;quot;&lt;br /&gt;
              p:signResponses=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:nameIDFormatPrecedence=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az Office 365 megköveteli a SAML2 &amp;lt;code&amp;gt;NameID&amp;lt;/code&amp;gt; használatát, amiben ugyanazt az értéket várja, mint ami az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; attribútumban van. Ezt a &amp;lt;code&amp;gt;conf/saml-nameid.xml&amp;lt;/code&amp;gt; fájlban kell beállítani:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- SAML 2 NameID Generation --&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.SAML2NameIDGenerators&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2TransientGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for all entities except Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.NOT&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
              c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
    &amp;lt;/bean&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2AttributeSourcedGenerator&amp;quot;&lt;br /&gt;
      p:format=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot;&lt;br /&gt;
      p:attributeSourceIds=&amp;quot;#{ {'ImmutableID'} }&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
          c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LDAP adatforrás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Mentsük el az LDAP szerver tanúsítványát PEM formátumban a &amp;lt;code&amp;gt;credentials/ldap-server.crt&amp;lt;/code&amp;gt; fájlba.&lt;br /&gt;
&lt;br /&gt;
Az Office 365 két attriútum kiadását kéri: &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; értékének meg kell egyeznie a felhasználó Office 365-ös &amp;lt;code&amp;gt;UserPrincipalName&amp;lt;/code&amp;gt; attribútumával (ami egyben a hivatalos (elsődleges) felhős email címe).&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; esetünkben az &amp;lt;code&amp;gt;eduPerosnPrincilapName&amp;lt;/code&amp;gt; MD5 hash értékének UUID formátumra konvertált változata lesz, amelyet egy javasccript segítségével képezünk.&lt;br /&gt;
&lt;br /&gt;
Cseréljük le a &amp;lt;code&amp;gt;conf/attribute-resolver.xml&amp;lt;/code&amp;gt; fájlt a &amp;lt;code&amp;gt;conf/attribute-resolver-full.xml&amp;lt;/code&amp;gt; nevűvel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# mv conf/attribute-resolver-full.xml conf/attribute-resolver.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;attribute-resolver.xml&amp;lt;/code&amp;gt; fájlban beállítunk néhány attribútumot és az LDAP adatforrást. Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; egy Shibboleth &amp;lt;code&amp;gt;ScriptedAttribute&amp;lt;/code&amp;gt; lesz, ami egy javasccript segítségével fogja előállítani az attribútum értékét az &amp;lt;code&amp;gt;eduPersonPrincipalName&amp;lt;/code&amp;gt; LDAP attribútumot felhasználva. Az MD5 hash kiszámítása külső segítség nélkül történik, ezért a script kissé hosszú.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeResolver&lt;br /&gt;
        xmlns=&amp;quot;urn:mace:shibboleth:2.0:resolver&amp;quot;&lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
        xsi:schemaLocation=&amp;quot;urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Attribute Definitions                 --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;uid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;uid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.1&amp;quot; friendlyName=&amp;quot;uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;mail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.3&amp;quot; friendlyName=&amp;quot;mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Prescoped&amp;quot; id=&amp;quot;eduPersonPrincipalName&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1ScopedString&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2ScopedString&amp;quot; name=&amp;quot;urn:oid:1.3.6.1.4.1.5923.1.1.1.6&amp;quot; friendlyName=&amp;quot;eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; friendlyName=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;ScriptedAttribute&amp;quot; id=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          friendlyName=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;Script&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
var MD5 = function(d) {&lt;br /&gt;
  var r = M(V(Y(X(d),8*d.length)));&lt;br /&gt;
  return r.toLowerCase()&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function M(d) {&lt;br /&gt;
  for(var _,m=&amp;quot;0123456789ABCDEF&amp;quot;,f=&amp;quot;&amp;quot;,r=0;r&amp;lt;d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_&amp;gt;&amp;gt;&amp;gt;4&amp;amp;15)+m.charAt(15&amp;amp;_);&lt;br /&gt;
  return f&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function X(d) {&lt;br /&gt;
  for(var _=Array(d.length&amp;gt;&amp;gt;2),m=0;m&amp;lt;_.length;m++)_[m]=0;&lt;br /&gt;
  for(m=0;m&amp;lt;8*d.length;m+=8)_[m&amp;gt;&amp;gt;5]|=(255&amp;amp;d.charCodeAt(m/8))&amp;lt;&amp;lt;m%32;&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function V(d) {&lt;br /&gt;
  for(var _=&amp;quot;&amp;quot;,m=0;m&amp;lt;32*d.length;m+=8)_+=String.fromCharCode(d[m&amp;gt;&amp;gt;5]&amp;gt;&amp;gt;&amp;gt;m%32&amp;amp;255);&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Y(d,_) {&lt;br /&gt;
  d[_&amp;gt;&amp;gt;5]|=128&amp;lt;&amp;lt;_%32,d[14+(_+64&amp;gt;&amp;gt;&amp;gt;9&amp;lt;&amp;lt;4)]=_;&lt;br /&gt;
  for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n&amp;lt;d.length;n+=16) {&lt;br /&gt;
    var h=m,t=f,g=r,e=i;&lt;br /&gt;
    f=md5_ii(&lt;br /&gt;
      f=md5_ii(&lt;br /&gt;
        f=md5_ii(&lt;br /&gt;
          f=md5_ii(&lt;br /&gt;
            f=md5_hh(&lt;br /&gt;
              f=md5_hh(&lt;br /&gt;
                f=md5_hh(&lt;br /&gt;
                  f=md5_hh(&lt;br /&gt;
                    f=md5_gg(&lt;br /&gt;
                      f=md5_gg(&lt;br /&gt;
                        f=md5_gg(&lt;br /&gt;
                          f=md5_gg(&lt;br /&gt;
                            f=md5_ff(&lt;br /&gt;
                              f=md5_ff(&lt;br /&gt;
                                f=md5_ff(&lt;br /&gt;
                                  f=md5_ff(&lt;br /&gt;
                                    f,r=md5_ff(&lt;br /&gt;
                                      r,i=md5_ff(&lt;br /&gt;
                                        i,m=md5_ff(&lt;br /&gt;
                                          m,f,r,i,d[n+0],7,-680876936&lt;br /&gt;
                                        ),f,r,d[n+1],12,-389564586&lt;br /&gt;
                                      ),m,f,d[n+2],17,606105819&lt;br /&gt;
                                    ),i,m,d[n+3],22,-1044525330&lt;br /&gt;
                                  ),r=md5_ff(&lt;br /&gt;
                                    r,i=md5_ff(&lt;br /&gt;
                                      i,m=md5_ff(&lt;br /&gt;
                                        m,f,r,i,d[n+4],7,-176418897&lt;br /&gt;
                                      ),f,r,d[n+5],12,1200080426&lt;br /&gt;
                                    ),m,f,d[n+6],17,-1473231341&lt;br /&gt;
                                  ),i,m,d[n+7],22,-45705983&lt;br /&gt;
                                ),r=md5_ff(&lt;br /&gt;
                                  r,i=md5_ff(&lt;br /&gt;
                                    i,m=md5_ff(&lt;br /&gt;
                                      m,f,r,i,d[n+8],7,1770035416&lt;br /&gt;
                                    ),f,r,d[n+9],12,-1958414417&lt;br /&gt;
                                  ),m,f,d[n+10],17,-42063&lt;br /&gt;
                                ),i,m,d[n+11],22,-1990404162&lt;br /&gt;
                              ),r=md5_ff(&lt;br /&gt;
                                r,i=md5_ff(&lt;br /&gt;
                                  i,m=md5_ff(&lt;br /&gt;
                                    m,f,r,i,d[n+12],7,1804603682&lt;br /&gt;
                                  ),f,r,d[n+13],12,-40341101&lt;br /&gt;
                                ),m,f,d[n+14],17,-1502002290&lt;br /&gt;
                              ),i,m,d[n+15],22,1236535329&lt;br /&gt;
                            ),r=md5_gg(&lt;br /&gt;
                              r,i=md5_gg(&lt;br /&gt;
                                i,m=md5_gg(&lt;br /&gt;
                                  m,f,r,i,d[n+1],5,-165796510&lt;br /&gt;
                                ),f,r,d[n+6],9,-1069501632&lt;br /&gt;
                              ),m,f,d[n+11],14,643717713&lt;br /&gt;
                            ),i,m,d[n+0],20,-373897302&lt;br /&gt;
                          ),r=md5_gg(&lt;br /&gt;
                            r,i=md5_gg(&lt;br /&gt;
                              i,m=md5_gg(&lt;br /&gt;
                                m,f,r,i,d[n+5],5,-701558691&lt;br /&gt;
                              ),f,r,d[n+10],9,38016083&lt;br /&gt;
                            ),m,f,d[n+15],14,-660478335&lt;br /&gt;
                          ),i,m,d[n+4],20,-405537848&lt;br /&gt;
                        ),r=md5_gg(&lt;br /&gt;
                          r,i=md5_gg(&lt;br /&gt;
                            i,m=md5_gg(&lt;br /&gt;
                              m,f,r,i,d[n+9],5,568446438&lt;br /&gt;
                            ),f,r,d[n+14],9,-1019803690&lt;br /&gt;
                          ),m,f,d[n+3],14,-187363961&lt;br /&gt;
                        ),i,m,d[n+8],20,1163531501&lt;br /&gt;
                      ),r=md5_gg(&lt;br /&gt;
                        r,i=md5_gg(&lt;br /&gt;
                          i,m=md5_gg(&lt;br /&gt;
                            m,f,r,i,d[n+13],5,-1444681467&lt;br /&gt;
                          ),f,r,d[n+2],9,-51403784&lt;br /&gt;
                        ),m,f,d[n+7],14,1735328473&lt;br /&gt;
                      ),i,m,d[n+12],20,-1926607734&lt;br /&gt;
                    ),r=md5_hh(&lt;br /&gt;
                      r,i=md5_hh(&lt;br /&gt;
                        i,m=md5_hh(&lt;br /&gt;
                          m,f,r,i,d[n+5],4,-378558&lt;br /&gt;
                        ),f,r,d[n+8],11,-2022574463&lt;br /&gt;
                      ),m,f,d[n+11],16,1839030562&lt;br /&gt;
                    ),i,m,d[n+14],23,-35309556&lt;br /&gt;
                  ),r=md5_hh(&lt;br /&gt;
                    r,i=md5_hh(&lt;br /&gt;
                      i,m=md5_hh(&lt;br /&gt;
                        m,f,r,i,d[n+1],4,-1530992060&lt;br /&gt;
                      ),f,r,d[n+4],11,1272893353&lt;br /&gt;
                    ),m,f,d[n+7],16,-155497632&lt;br /&gt;
                  ),i,m,d[n+10],23,-1094730640&lt;br /&gt;
                ),r=md5_hh(&lt;br /&gt;
                  r,i=md5_hh(&lt;br /&gt;
                    i,m=md5_hh(&lt;br /&gt;
                      m,f,r,i,d[n+13],4,681279174&lt;br /&gt;
                    ),f,r,d[n+0],11,-358537222&lt;br /&gt;
                  ),m,f,d[n+3],16,-722521979&lt;br /&gt;
                ),i,m,d[n+6],23,76029189&lt;br /&gt;
              ),r=md5_hh(&lt;br /&gt;
                r,i=md5_hh(&lt;br /&gt;
                  i,m=md5_hh(&lt;br /&gt;
                    m,f,r,i,d[n+9],4,-640364487&lt;br /&gt;
                  ),f,r,d[n+12],11,-421815835&lt;br /&gt;
                ),m,f,d[n+15],16,530742520&lt;br /&gt;
              ),i,m,d[n+2],23,-995338651&lt;br /&gt;
            ),r=md5_ii(&lt;br /&gt;
              r,i=md5_ii(&lt;br /&gt;
                i,m=md5_ii(&lt;br /&gt;
                  m,f,r,i,d[n+0],6,-198630844&lt;br /&gt;
                ),f,r,d[n+7],10,1126891415&lt;br /&gt;
              ),m,f,d[n+14],15,-1416354905&lt;br /&gt;
            ),i,m,d[n+5],21,-57434055&lt;br /&gt;
          ),r=md5_ii(&lt;br /&gt;
            r,i=md5_ii(&lt;br /&gt;
              i,m=md5_ii(&lt;br /&gt;
                m,f,r,i,d[n+12],6,1700485571&lt;br /&gt;
              ),f,r,d[n+3],10,-1894986606&lt;br /&gt;
            ),m,f,d[n+10],15,-1051523&lt;br /&gt;
          ),i,m,d[n+1],21,-2054922799&lt;br /&gt;
        ),r=md5_ii(&lt;br /&gt;
          r,i=md5_ii(&lt;br /&gt;
            i,m=md5_ii(&lt;br /&gt;
              m,f,r,i,d[n+8],6,1873313359&lt;br /&gt;
            ),f,r,d[n+15],10,-30611744&lt;br /&gt;
          ),m,f,d[n+6],15,-1560198380&lt;br /&gt;
        ),i,m,d[n+13],21,1309151649&lt;br /&gt;
      ),r=md5_ii(&lt;br /&gt;
        r,i=md5_ii(&lt;br /&gt;
          i,m=md5_ii(&lt;br /&gt;
            m,f,r,i,d[n+4],6,-145523070&lt;br /&gt;
          ),f,r,d[n+11],10,-1120210379&lt;br /&gt;
        ),m,f,d[n+2],15,718787259&lt;br /&gt;
      ),i,m,d[n+9],21,-343485551&lt;br /&gt;
    ),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)&lt;br /&gt;
  }&lt;br /&gt;
  return Array(m,f,r,i)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_cmn(d,_,m,f,r,i) {&lt;br /&gt;
  return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ff(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;m|~_&amp;amp;f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_gg(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;f|m&amp;amp;~f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_hh(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_^m^f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ii(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(m^(_|~f),d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function safe_add(d,_) {&lt;br /&gt;
  var m=(65535&amp;amp;d)+(65535&amp;amp;_);&lt;br /&gt;
  return(d&amp;gt;&amp;gt;16)+(_&amp;gt;&amp;gt;16)+(m&amp;gt;&amp;gt;16)&amp;lt;&amp;lt;16|65535&amp;amp;m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function bit_rol(d,_) {&lt;br /&gt;
  return d&amp;lt;&amp;lt;_|d&amp;gt;&amp;gt;&amp;gt;32-_&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var UUID = function(s) {&lt;br /&gt;
  return s.substring(0,8) + '-' + s.substring(8,12) + '-' + s.substring(12,16) + '-' + s.substring(16,20) + '-' + s.substring(20)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
ImmutableID.addValue(UUID(MD5(eduPersonPrincipalName.getValues().get(0))));&lt;br /&gt;
        ]]&amp;gt;&amp;lt;/Script&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Data Connectors                       --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;myLDAP&amp;quot; xsi:type=&amp;quot;LDAPDirectory&amp;quot;&lt;br /&gt;
        ldapURL=&amp;quot;%{idp.attribute.resolver.LDAP.ldapURL}&amp;quot;&lt;br /&gt;
        baseDN=&amp;quot;%{idp.attribute.resolver.LDAP.baseDN}&amp;quot; &lt;br /&gt;
        principal=&amp;quot;%{idp.attribute.resolver.LDAP.bindDN}&amp;quot;&lt;br /&gt;
        principalCredential=&amp;quot;%{idp.attribute.resolver.LDAP.bindDNCredential}&amp;quot;&lt;br /&gt;
        useStartTLS=&amp;quot;%{idp.attribute.resolver.LDAP.useStartTLS:true}&amp;quot;&lt;br /&gt;
        connectTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.connectTimeout}&amp;quot;&lt;br /&gt;
                trustFile=&amp;quot;%{idp.attribute.resolver.LDAP.trustCertificates}&amp;quot;&lt;br /&gt;
        responseTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.responseTimeout}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;![CDATA[&lt;br /&gt;
                %{idp.attribute.resolver.LDAP.searchFilter}&lt;br /&gt;
            ]]&amp;gt;&lt;br /&gt;
        &amp;lt;/FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;ConnectionPool&lt;br /&gt;
            minPoolSize=&amp;quot;%{idp.pool.LDAP.minSize:3}&amp;quot;&lt;br /&gt;
            maxPoolSize=&amp;quot;%{idp.pool.LDAP.maxSize:10}&amp;quot;&lt;br /&gt;
            blockWaitTime=&amp;quot;%{idp.pool.LDAP.blockWaitTime:PT3S}&amp;quot;&lt;br /&gt;
            validatePeriodically=&amp;quot;%{idp.pool.LDAP.validatePeriodically:true}&amp;quot;&lt;br /&gt;
            validateTimerPeriod=&amp;quot;%{idp.pool.LDAP.validatePeriod:PT5M}&amp;quot;&lt;br /&gt;
            expirationTime=&amp;quot;%{idp.pool.LDAP.idleTime:PT10M}&amp;quot;&lt;br /&gt;
            failFastInitialize=&amp;quot;%{idp.pool.LDAP.failFastInitialize:false}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;computed&amp;quot; xsi:type=&amp;quot;ComputedId&amp;quot;&lt;br /&gt;
                   generatedAttributeID=&amp;quot;computedId&amp;quot;&lt;br /&gt;
                   salt=&amp;quot;%{idp.persistentId.salt}&amp;quot;&lt;br /&gt;
                   algorithm=&amp;quot;%{idp.persistentId.algorithm:SHA}&amp;quot;&lt;br /&gt;
                   encoding=&amp;quot;%{idp.persistentId.encoding:BASE32}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;%{idp.persistentId.sourceAttribute}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeResolver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha anonymous LDAP keresést akarunk használni, akkor a &amp;lt;code&amp;gt;principal&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;principalCredential&amp;lt;/code&amp;gt; paramétereket törölni kell a myLDAP DataConnector-ból.&lt;br /&gt;
&lt;br /&gt;
=== Attribútum kiadás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Az IdP-nek ki kell adnia az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; és az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; attribútumokat a Microsoft-nak. Ezért létre kell hozni egy új &amp;lt;code&amp;gt;AttributeFilterPolicy&amp;lt;/code&amp;gt; szabályt a &amp;lt;code&amp;gt;conf/attribute-filter.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Office 365 ImmutableID and IDPEmail --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeFilterPolicy id=&amp;quot;PolicyForWindowsAzureAD&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;PolicyRequirementRule xsi:type=&amp;quot;Requester&amp;quot; value=&amp;quot;urn:federation:MicrosoftOnline&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeFilterPolicy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A properties fájlok beállításai ===&lt;br /&gt;
&lt;br /&gt;
'''conf/idp.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.session.StorageService = shibboleth.StorageService&lt;br /&gt;
idp.session.trackSPSessions = true&lt;br /&gt;
idp.session.secondaryServiceIndex = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/ldap.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.authn.LDAP.ldapURL = ldap://ldap.example.com&lt;br /&gt;
idp.authn.LDAP.useStartTLS = true&lt;br /&gt;
idp.authn.LDAP.sslConfig = certificateTrust&lt;br /&gt;
# idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore&lt;br /&gt;
idp.authn.LDAP.returnAttributes = uid,mail,eduPersonPrincipalName&lt;br /&gt;
idp.authn.LDAP.baseDN = ou=People,dc=example,dc=com&lt;br /&gt;
idp.authn.LDAP.userFilter = (|(uid={user})(mail={user}))&lt;br /&gt;
# idp.authn.LDAP.bindDN = uid=myservice,ou=system&lt;br /&gt;
# idp.authn.LDAP.bindDNCredential = myServicePassword&lt;br /&gt;
idp.authn.LDAP.dnFormat = uid=%s,ou=People,dc=example,dc=com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/saml-nameid.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.nameid.saml2.default = urn:oasis:names:tc:SAML:2.0:nameid-format:transient&lt;br /&gt;
idp.nameid.saml1.default = urn:mace:shibboleth:1.0:nameIdentifier&lt;br /&gt;
idp.transientId.generator = shibboleth.CryptoTransientIdGenerator&lt;br /&gt;
idp.persistentId.sourceAttribute = eduPersonPrincipalName&lt;br /&gt;
idp.persistentId.useUnfilteredAttributes = true&lt;br /&gt;
idp.persistentId.salt = XXX_secret_salt_XXX&lt;br /&gt;
idp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Docker image készítése ===&lt;br /&gt;
&lt;br /&gt;
Hozzunk létre egy &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;-t ott, ahol a &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa található, az alábbi tartalommal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FROM       unicon/shibboleth-idp&lt;br /&gt;
MAINTAINER John Doe &amp;lt;john.doe@example.com&amp;gt;&lt;br /&gt;
ADD        customized-shibboleth-idp/ /opt/shibboleth-idp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsük el az image fájlt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker build -t example-com/idp-shib .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indítsuk el az új IdP-t. A 4443-as és 8443-as portokat adjuk ki, és ne feledjük az előzőleg az SSL kulcsok számára beállított jelszavakat sem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it --rm \&lt;br /&gt;
  -p 4443:4443 \&lt;br /&gt;
  -p 8443:8443 \&lt;br /&gt;
  --network bridge \&lt;br /&gt;
  -e JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  -e JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  example-com/idp-shib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== További leírások ===&lt;br /&gt;
&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]&lt;br /&gt;
* [https://wiki.sunet.se/display/SWAMID/How+to+use+Shibboleth+Identity+Provider+v3+with+Office+365 How to use Shibboleth Identity Provider v3 with Office 365]&lt;br /&gt;
&lt;br /&gt;
[[Category: AAI]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SimpleSAMLphp]]&lt;br /&gt;
[[Category: Shibboleth]]&lt;/div&gt;</summary>
		<author><name>Ecsedi(AT)unideb.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4552</id>
		<title>O365 SAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4552"/>
				<updated>2020-02-26T06:27:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ecsedi(AT)unideb.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az Office365 szolgáltatások SAML azonosítással történő használatához egy új SP-t kell konfigurálni az IdP konfigurációjában, mivel ez az SP nem szerepel a föderációs metaadatok között. A Microsoft által üzemeltetett SP-nek speciális attribútum igényei vannak:&lt;br /&gt;
* perzisztens NameID-t kell küldeni ('''ImmutableID''')&lt;br /&gt;
* kell küldeni egy '''IDPEmail''' nevű attribútumot&lt;br /&gt;
&lt;br /&gt;
== Kiadott attribútumok ==&lt;br /&gt;
=== ImmutableID ===&lt;br /&gt;
Az ImmutableID az eduPersonPrincipalName attribútum MD5 hashének UUID formátumra konvertált változata.&lt;br /&gt;
&lt;br /&gt;
=== IDPEmail ===&lt;br /&gt;
A kiadott e-mail értéknek meg kell egyeznie az Office365 által szolgáltatott e-mail címmel. Ez azt is jelenti, hogy az IdP-től kapott e-mail attribútum domain részét előzetesen validálni kell az Office365-ben.&lt;br /&gt;
&lt;br /&gt;
== SimpleSAMLphp ==&lt;br /&gt;
A &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ba kell elhelyezni a következő bejegyzést:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  'entityid' =&amp;gt; 'urn:federation:MicrosoftOnline',&lt;br /&gt;
&lt;br /&gt;
  // Expose both required attributes &lt;br /&gt;
  'attributes' =&amp;gt; array('IDPEmail', 'ImmutableID'),&lt;br /&gt;
  'attributes.NameFormat' =&amp;gt; &amp;quot;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  // Configure attribute mapping and ImmutableID generation&lt;br /&gt;
  'authproc' =&amp;gt; array(&lt;br /&gt;
    31 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:PHP',&lt;br /&gt;
      'code' =&amp;gt; '&lt;br /&gt;
        $eppn = $attributes[&amp;quot;eduPersonPrincipalName&amp;quot;][0];&lt;br /&gt;
        $chunks = str_split(md5($eppn), 4);        &lt;br /&gt;
        $attributes[&amp;quot;ImmutableID&amp;quot;][0] = vsprintf(&amp;quot;%s%s-%s-%s-%s-%s%s%s&amp;quot;, $chunks);&lt;br /&gt;
      ',&lt;br /&gt;
    ),&lt;br /&gt;
        36 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:AttributeMap',&lt;br /&gt;
      'mail' =&amp;gt; 'IDPEmail',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  // Send ImmutableID as a &amp;quot;persistent&amp;quot; NameID&lt;br /&gt;
  'NameIDFormat' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',&lt;br /&gt;
  'simplesaml.nameidattribute' =&amp;gt; 'ImmutableID',&lt;br /&gt;
&lt;br /&gt;
  'contacts' =&amp;gt; array(),&lt;br /&gt;
  'metadata-set' =&amp;gt; 'saml20-sp-remote',&lt;br /&gt;
&lt;br /&gt;
  'AssertionConsumerService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 0,&lt;br /&gt;
      'isDefault' =&amp;gt; true,&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 1,&lt;br /&gt;
    ),&lt;br /&gt;
    2 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:PAOS',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 2,&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'SingleLogoutService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt;&lt;br /&gt;
    array(&lt;br /&gt;
    'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
    'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  'keys' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUz&lt;br /&gt;
        NDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYD&lt;br /&gt;
        KgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8&lt;br /&gt;
        fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0&lt;br /&gt;
        eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B&lt;br /&gt;
        5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4b&lt;br /&gt;
        PPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mM&lt;br /&gt;
        UqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQ&lt;br /&gt;
        s6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyv&lt;br /&gt;
        f2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52W&lt;br /&gt;
        oM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tq&lt;br /&gt;
        zHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpx&lt;br /&gt;
        SDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYi&lt;br /&gt;
        kA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5q&lt;br /&gt;
        K3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx&lt;br /&gt;
        2ZDQaQ==',&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJAKLDsqkylLefMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDEwMTAxODE2&lt;br /&gt;
        MTNaFw0xOTEwMDkxODE2MTNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7A&lt;br /&gt;
        3m6uvOxEsX+NlB1hnflaR8DJj597wY3qyh/FX4O6rKvU2leAfINmBWcjEFApCKi9&lt;br /&gt;
        p5uIaZpNlDpPQ+R3BaZx+4NhHbOMpeWlpIiZHL61lwbulzurffUPhtzQNHAVzOBk&lt;br /&gt;
        ZsOgN9BD/hOleU//d+IXz08ateUb3Ip2vyaodilYQDDi5M9yOhanv1cO1Usjo2xT&lt;br /&gt;
        LfiK+TVygu+8bo+/8JHGPRy6pnghng970DRBDkVrKzozlrnmMesdSrtuCnsgyRbE&lt;br /&gt;
        XckxaQ8S2nDYyFqBI0PkcBW8+0akdFWW58Os5cGbPFeHi6vtZCR5pWw5pnqtuoip&lt;br /&gt;
        rdk9jg1axT3vwu+RVdcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUBjNylGJBvkAY/4yI&lt;br /&gt;
        IoD00R6p5hIwWQYDVR0jBFIwUIAUBjNylGJBvkAY/4yIIoD00R6p5hKhLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAKLDsqky&lt;br /&gt;
        lLefMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAQGZUlJ3zzJvy1OLd&lt;br /&gt;
        tV3NTYHlbVHm3Fty17xqW9Ui8GE8sEWeUdHA6eURNNpNpd+gAGC6Tp+k+cU1LlPw&lt;br /&gt;
        Xm7BAATJ/2DjY8tzRc6r6EneQWRkIa8xpbvknXvUml6iFgo2ofOWLaFk6XpQ64MA&lt;br /&gt;
        O35wv9XEARNabJ9wJSRSevUigAx2U2GvaorV5PgqHImiKTSrL0K6j8B4OqXWUqP0&lt;br /&gt;
        KGf7pCdGlrq2XEl95N2zj8n/scvA9JasImztsVlZ+WxeF+OAMvWQQFc54gC6lwWc&lt;br /&gt;
        8kno8vPn3lwxVkTU0o9wcHnOhNi2hzVDV85sz7P9dOZYF73uy1uLshdjCcwlmQ2l&lt;br /&gt;
        A9OV9w==',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'saml20.sign.assertion' =&amp;gt; true,&lt;br /&gt;
   // This metadata does not contain an encryption key,&lt;br /&gt;
   // therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.&lt;br /&gt;
  'assertion.encryption' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ECP (Enhanced Client or Proxy) ==&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.&lt;br /&gt;
Ehhez a &amp;lt;code&amp;gt;metadata/saml20-idp-hosted.php&amp;lt;/code&amp;gt; file-ba fel kell venni az IdP metaadatai közé egy&lt;br /&gt;
&amp;lt;code&amp;gt;'saml20.ecp'&amp;lt;/code&amp;gt; elemet &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; értékkel, illetve az SP metaadatokhoz is hozzá kell&lt;br /&gt;
adni két beállítást a &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  // ...&lt;br /&gt;
  'signature.algorithm'  =&amp;gt; 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',&lt;br /&gt;
  'saml20.sign.response' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shibboleth ==&lt;br /&gt;
&lt;br /&gt;
Egy unicon/shibboleth-idp alapú docker image készítését mutatjuk be az alábbiakban.&lt;br /&gt;
&lt;br /&gt;
=== Kezdeti IdP konfiguráció ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it -v $(pwd):/ext-mount --rm unicon/shibboleth-idp init-idp.sh&lt;br /&gt;
&lt;br /&gt;
Please complete the following for your IdP environment:&lt;br /&gt;
Hostname: [64ed9b77b493.localdomain]&lt;br /&gt;
idp.example.com&lt;br /&gt;
SAML EntityID: [https://idp.example.com/idp/shibboleth]&lt;br /&gt;
https://idp.example.com:4443/idp/shibboleth&lt;br /&gt;
Attribute Scope: [localdomain]&lt;br /&gt;
example.com&lt;br /&gt;
Backchannel PKCS12 Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Cookie Encryption Key Password: XXXsecretXXX&lt;br /&gt;
Re-enter password: XXXsecretXXX&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/bin does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/edit-webapp does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/dist does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/doc does not exist.&lt;br /&gt;
Warning: /opt/shibboleth-idp-tmp/system does not exist.&lt;br /&gt;
Generating Signing Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Encryption Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating Backchannel keystore, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ...&lt;br /&gt;
...done&lt;br /&gt;
Creating cookie encryption key files...&lt;br /&gt;
...done&lt;br /&gt;
Rebuilding /opt/shibboleth-idp-tmp/war/idp.war ...&lt;br /&gt;
...done&lt;br /&gt;
&lt;br /&gt;
BUILD SUCCESSFUL&lt;br /&gt;
Total time: 7 minutes 4 seconds&lt;br /&gt;
A basic Shibboleth IdP config and UI has been copied to ./customized-shibboleth-idp/ (assuming the&lt;br /&gt;
default volume mapping was used).&lt;br /&gt;
Most files, if not being customized can be removed from what was exported/the local Docker image and&lt;br /&gt;
baseline files will be used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keletkezik egy &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa a következő szerkezettel:&lt;br /&gt;
&lt;br /&gt;
* conf&lt;br /&gt;
* credentials&lt;br /&gt;
* metadata&lt;br /&gt;
* views&lt;br /&gt;
* views/admin&lt;br /&gt;
* views/client-storage&lt;br /&gt;
* views/intercept&lt;br /&gt;
* webapp&lt;br /&gt;
* webapp/css&lt;br /&gt;
* webapp/images&lt;br /&gt;
&lt;br /&gt;
Az alábbi fájlokat kell majd módosítani:&lt;br /&gt;
&lt;br /&gt;
* conf/attribute-filter.xml&lt;br /&gt;
* conf/attribute-resolver.xml&lt;br /&gt;
* conf/idp.properties&lt;br /&gt;
* conf/ldap.properties&lt;br /&gt;
* conf/metadata-providers.xml&lt;br /&gt;
* conf/relying-party.xml&lt;br /&gt;
* conf/saml-nameid.properties&lt;br /&gt;
* conf/saml-nameid.xml&lt;br /&gt;
* metadata/idp-metadata.xml&lt;br /&gt;
&lt;br /&gt;
Néhány másik fájlt pedig létre kell hozni:&lt;br /&gt;
&lt;br /&gt;
* credentials/idp-browser.p12 (webserver SSL key/cert)&lt;br /&gt;
* credentials/ldap-server.crt (LDAP server certificate)&lt;br /&gt;
* metadata/federationmetadata.xml (Office 365 federation metadata)&lt;br /&gt;
&lt;br /&gt;
Mivel ebben a példában az IdP-t a 4443-as porton fogjuk elérni, ezért ellenőrizni kell minden &amp;lt;code&amp;gt;Location&amp;lt;/code&amp;gt; paramétert a &amp;lt;code&amp;gt;metadata/idp-metadata.xml&amp;lt;/code&amp;gt; fájlban, hogy jó helyre mutat-e. Továbbá engedélyezni kell a &amp;lt;code&amp;gt;SingleLogoutService&amp;lt;/code&amp;gt; bejegyzéseket (amelyek alapból ki vannak iktatva).&lt;br /&gt;
&lt;br /&gt;
=== A webszerver tanúsítvány előkészítése ===&lt;br /&gt;
&lt;br /&gt;
A felhasználók által látogatott oldalakhoz célszerű valamilyen hitelesítés szolgáltató által aláírt tanúsítványt használni. Másoljuk be a webszerver tanúsítványt, a tanúsítvány láncot és a szerver kulcsot PEM formátumban egy mappába, majd egyesítsük őket egyetlen p12-es fáljba az openssl segítségével:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat webserver.crt intermediate_ca.crt &amp;gt; cert-chain.txt&lt;br /&gt;
# openssl pkcs12 -export -inkey webserver.key -in cert-chain.txt -out idp-browser.p12&lt;br /&gt;
Enter Export Password: XXX_secret_XXX&lt;br /&gt;
Verifying - Enter Export Password: XXX_secret_XXX&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az előállított &amp;lt;code&amp;gt;idp-browser.p12&amp;lt;/code&amp;gt; fájlt másoljuk be a &amp;lt;code&amp;gt;credentials&amp;lt;/code&amp;gt; mappába.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft SAML SP metadata és föderációs beállítások ===&lt;br /&gt;
&lt;br /&gt;
Töltsük le a Microsoft SAML2 SP metaadatait a &amp;lt;code&amp;gt;metadata&amp;lt;/code&amp;gt; könyvtárba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# wget https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsünk egy MetadataProvider-t a &amp;lt;code&amp;gt;conf/metadata-providers.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;MetadataProvider id=&amp;quot;MicrosoftOnline&amp;quot;&lt;br /&gt;
                  xsi:type=&amp;quot;FilesystemMetadataProvider&amp;quot;&lt;br /&gt;
                  metadataFile=&amp;quot;%{idp.home}/metadata/federationmetadata.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;conf/relying-party.xml&amp;lt;/code&amp;gt; fájlban néhány speciális beállítást kell eszközölnünk, hogy a föderáció működjön (a shibboleth.RelyingPartyOverrides szekció alatt):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.RelyingPartyOverrides&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;bean parent=&amp;quot;RelyingPartyByName&amp;quot; c:relyingPartyIds=&amp;quot;urn:federation:MicrosoftOnline&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;profileConfigurations&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;list&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.SSO&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;SAML2.ECP&amp;quot;&lt;br /&gt;
              p:encryptAssertions=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:signAssertions=&amp;quot;true&amp;quot;&lt;br /&gt;
              p:signResponses=&amp;quot;false&amp;quot;&lt;br /&gt;
              p:nameIDFormatPrecedence=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az Office 365 megköveteli a SAML2 &amp;lt;code&amp;gt;NameID&amp;lt;/code&amp;gt; használatát, amiben ugyanazt az értéket várja, mint ami az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; attribútumban van. Ezt a &amp;lt;code&amp;gt;conf/saml-nameid.xml&amp;lt;/code&amp;gt; fájlban kell beállítani:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- SAML 2 NameID Generation --&amp;gt;&lt;br /&gt;
&amp;lt;util:list id=&amp;quot;shibboleth.SAML2NameIDGenerators&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2TransientGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;ref bean=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for all entities except Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2PersistentGenerator&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.NOT&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
        &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
              c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
    &amp;lt;/bean&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Persistent ID Generator for Microsoft --&amp;gt;&lt;br /&gt;
&amp;lt;bean parent=&amp;quot;shibboleth.SAML2AttributeSourcedGenerator&amp;quot;&lt;br /&gt;
      p:format=&amp;quot;urn:oasis:names:tc:SAML:2.0:nameid-format:persistent&amp;quot;&lt;br /&gt;
      p:attributeSourceIds=&amp;quot;#{ {'ImmutableID'} }&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;activationCondition&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;bean parent=&amp;quot;shibboleth.Conditions.RelyingPartyId&amp;quot;&lt;br /&gt;
          c:candidates=&amp;quot;#{{'urn:federation:MicrosoftOnline'}}&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/util:list&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LDAP adatforrás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Mentsük el az LDAP szerver tanúsítványát PEM formátumban a &amp;lt;code&amp;gt;credentials/ldap-server.crt&amp;lt;/code&amp;gt; fájlba.&lt;br /&gt;
&lt;br /&gt;
Az Office 365 két attriútum kiadását kéri: &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; értékének meg kell egyeznie a felhasználó Office 365-ös &amp;lt;code&amp;gt;UserPrincipalName&amp;lt;/code&amp;gt; attribútumával (ami egyben a hivatalos (elsődleges) felhős email címe).&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; esetünkben az &amp;lt;code&amp;gt;eduPerosnPrincilapName&amp;lt;/code&amp;gt; MD5 hash értékének UUID formátumra konvertált változata lesz, amelyet egy javasccript segítségével képezünk.&lt;br /&gt;
&lt;br /&gt;
Cseréljük le a &amp;lt;code&amp;gt;conf/attribute-resolver.xml&amp;lt;/code&amp;gt; fájlt a &amp;lt;code&amp;gt;conf/attribute-resolver-full.xml&amp;lt;/code&amp;gt; nevűvel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# mv conf/attribute-resolver-full.xml conf/attribute-resolver.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &amp;lt;code&amp;gt;attribute-resolver.xml&amp;lt;/code&amp;gt; fájlban beállítunk néhány attribútumot és az LDAP adatforrást. Az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; egy Shibboleth &amp;lt;code&amp;gt;ScriptedAttribute&amp;lt;/code&amp;gt; lesz, ami egy javasccript segítségével fogja előállítani az attribútum értékét az &amp;lt;code&amp;gt;eduPersonPrincipalName&amp;lt;/code&amp;gt; LDAP attribútumot felhasználva. Az MD5 hash kiszámítása külső segítség nélkül történik, ezért a script kissé hosszú.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeResolver&lt;br /&gt;
        xmlns=&amp;quot;urn:mace:shibboleth:2.0:resolver&amp;quot;&lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
        xsi:schemaLocation=&amp;quot;urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Attribute Definitions                 --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;uid&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;uid&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.1&amp;quot; friendlyName=&amp;quot;uid&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;mail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;urn:oid:0.9.2342.19200300.100.1.3&amp;quot; friendlyName=&amp;quot;mail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Prescoped&amp;quot; id=&amp;quot;eduPersonPrincipalName&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1ScopedString&amp;quot; name=&amp;quot;urn:mace:dir:attribute-def:eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2ScopedString&amp;quot; name=&amp;quot;urn:oid:1.3.6.1.4.1.5923.1.1.1.6&amp;quot; friendlyName=&amp;quot;eduPersonPrincipalName&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;Simple&amp;quot; id=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;mail&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot; name=&amp;quot;IDPEmail&amp;quot; friendlyName=&amp;quot;IDPEmail&amp;quot; encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeDefinition xsi:type=&amp;quot;ScriptedAttribute&amp;quot; id=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;eduPersonPrincipalName&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML1String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;AttributeEncoder xsi:type=&amp;quot;SAML2String&amp;quot;&lt;br /&gt;
                          name=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          friendlyName=&amp;quot;ImmutableID&amp;quot;&lt;br /&gt;
                          encodeType=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;Script&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
var MD5 = function(d) {&lt;br /&gt;
  var r = M(V(Y(X(d),8*d.length)));&lt;br /&gt;
  return r.toLowerCase()&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function M(d) {&lt;br /&gt;
  for(var _,m=&amp;quot;0123456789ABCDEF&amp;quot;,f=&amp;quot;&amp;quot;,r=0;r&amp;lt;d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_&amp;gt;&amp;gt;&amp;gt;4&amp;amp;15)+m.charAt(15&amp;amp;_);&lt;br /&gt;
  return f&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function X(d) {&lt;br /&gt;
  for(var _=Array(d.length&amp;gt;&amp;gt;2),m=0;m&amp;lt;_.length;m++)_[m]=0;&lt;br /&gt;
  for(m=0;m&amp;lt;8*d.length;m+=8)_[m&amp;gt;&amp;gt;5]|=(255&amp;amp;d.charCodeAt(m/8))&amp;lt;&amp;lt;m%32;&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function V(d) {&lt;br /&gt;
  for(var _=&amp;quot;&amp;quot;,m=0;m&amp;lt;32*d.length;m+=8)_+=String.fromCharCode(d[m&amp;gt;&amp;gt;5]&amp;gt;&amp;gt;&amp;gt;m%32&amp;amp;255);&lt;br /&gt;
  return _&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Y(d,_) {&lt;br /&gt;
  d[_&amp;gt;&amp;gt;5]|=128&amp;lt;&amp;lt;_%32,d[14+(_+64&amp;gt;&amp;gt;&amp;gt;9&amp;lt;&amp;lt;4)]=_;&lt;br /&gt;
  for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n&amp;lt;d.length;n+=16) {&lt;br /&gt;
    var h=m,t=f,g=r,e=i;&lt;br /&gt;
    f=md5_ii(&lt;br /&gt;
      f=md5_ii(&lt;br /&gt;
        f=md5_ii(&lt;br /&gt;
          f=md5_ii(&lt;br /&gt;
            f=md5_hh(&lt;br /&gt;
              f=md5_hh(&lt;br /&gt;
                f=md5_hh(&lt;br /&gt;
                  f=md5_hh(&lt;br /&gt;
                    f=md5_gg(&lt;br /&gt;
                      f=md5_gg(&lt;br /&gt;
                        f=md5_gg(&lt;br /&gt;
                          f=md5_gg(&lt;br /&gt;
                            f=md5_ff(&lt;br /&gt;
                              f=md5_ff(&lt;br /&gt;
                                f=md5_ff(&lt;br /&gt;
                                  f=md5_ff(&lt;br /&gt;
                                    f,r=md5_ff(&lt;br /&gt;
                                      r,i=md5_ff(&lt;br /&gt;
                                        i,m=md5_ff(&lt;br /&gt;
                                          m,f,r,i,d[n+0],7,-680876936&lt;br /&gt;
                                        ),f,r,d[n+1],12,-389564586&lt;br /&gt;
                                      ),m,f,d[n+2],17,606105819&lt;br /&gt;
                                    ),i,m,d[n+3],22,-1044525330&lt;br /&gt;
                                  ),r=md5_ff(&lt;br /&gt;
                                    r,i=md5_ff(&lt;br /&gt;
                                      i,m=md5_ff(&lt;br /&gt;
                                        m,f,r,i,d[n+4],7,-176418897&lt;br /&gt;
                                      ),f,r,d[n+5],12,1200080426&lt;br /&gt;
                                    ),m,f,d[n+6],17,-1473231341&lt;br /&gt;
                                  ),i,m,d[n+7],22,-45705983&lt;br /&gt;
                                ),r=md5_ff(&lt;br /&gt;
                                  r,i=md5_ff(&lt;br /&gt;
                                    i,m=md5_ff(&lt;br /&gt;
                                      m,f,r,i,d[n+8],7,1770035416&lt;br /&gt;
                                    ),f,r,d[n+9],12,-1958414417&lt;br /&gt;
                                  ),m,f,d[n+10],17,-42063&lt;br /&gt;
                                ),i,m,d[n+11],22,-1990404162&lt;br /&gt;
                              ),r=md5_ff(&lt;br /&gt;
                                r,i=md5_ff(&lt;br /&gt;
                                  i,m=md5_ff(&lt;br /&gt;
                                    m,f,r,i,d[n+12],7,1804603682&lt;br /&gt;
                                  ),f,r,d[n+13],12,-40341101&lt;br /&gt;
                                ),m,f,d[n+14],17,-1502002290&lt;br /&gt;
                              ),i,m,d[n+15],22,1236535329&lt;br /&gt;
                            ),r=md5_gg(&lt;br /&gt;
                              r,i=md5_gg(&lt;br /&gt;
                                i,m=md5_gg(&lt;br /&gt;
                                  m,f,r,i,d[n+1],5,-165796510&lt;br /&gt;
                                ),f,r,d[n+6],9,-1069501632&lt;br /&gt;
                              ),m,f,d[n+11],14,643717713&lt;br /&gt;
                            ),i,m,d[n+0],20,-373897302&lt;br /&gt;
                          ),r=md5_gg(&lt;br /&gt;
                            r,i=md5_gg(&lt;br /&gt;
                              i,m=md5_gg(&lt;br /&gt;
                                m,f,r,i,d[n+5],5,-701558691&lt;br /&gt;
                              ),f,r,d[n+10],9,38016083&lt;br /&gt;
                            ),m,f,d[n+15],14,-660478335&lt;br /&gt;
                          ),i,m,d[n+4],20,-405537848&lt;br /&gt;
                        ),r=md5_gg(&lt;br /&gt;
                          r,i=md5_gg(&lt;br /&gt;
                            i,m=md5_gg(&lt;br /&gt;
                              m,f,r,i,d[n+9],5,568446438&lt;br /&gt;
                            ),f,r,d[n+14],9,-1019803690&lt;br /&gt;
                          ),m,f,d[n+3],14,-187363961&lt;br /&gt;
                        ),i,m,d[n+8],20,1163531501&lt;br /&gt;
                      ),r=md5_gg(&lt;br /&gt;
                        r,i=md5_gg(&lt;br /&gt;
                          i,m=md5_gg(&lt;br /&gt;
                            m,f,r,i,d[n+13],5,-1444681467&lt;br /&gt;
                          ),f,r,d[n+2],9,-51403784&lt;br /&gt;
                        ),m,f,d[n+7],14,1735328473&lt;br /&gt;
                      ),i,m,d[n+12],20,-1926607734&lt;br /&gt;
                    ),r=md5_hh(&lt;br /&gt;
                      r,i=md5_hh(&lt;br /&gt;
                        i,m=md5_hh(&lt;br /&gt;
                          m,f,r,i,d[n+5],4,-378558&lt;br /&gt;
                        ),f,r,d[n+8],11,-2022574463&lt;br /&gt;
                      ),m,f,d[n+11],16,1839030562&lt;br /&gt;
                    ),i,m,d[n+14],23,-35309556&lt;br /&gt;
                  ),r=md5_hh(&lt;br /&gt;
                    r,i=md5_hh(&lt;br /&gt;
                      i,m=md5_hh(&lt;br /&gt;
                        m,f,r,i,d[n+1],4,-1530992060&lt;br /&gt;
                      ),f,r,d[n+4],11,1272893353&lt;br /&gt;
                    ),m,f,d[n+7],16,-155497632&lt;br /&gt;
                  ),i,m,d[n+10],23,-1094730640&lt;br /&gt;
                ),r=md5_hh(&lt;br /&gt;
                  r,i=md5_hh(&lt;br /&gt;
                    i,m=md5_hh(&lt;br /&gt;
                      m,f,r,i,d[n+13],4,681279174&lt;br /&gt;
                    ),f,r,d[n+0],11,-358537222&lt;br /&gt;
                  ),m,f,d[n+3],16,-722521979&lt;br /&gt;
                ),i,m,d[n+6],23,76029189&lt;br /&gt;
              ),r=md5_hh(&lt;br /&gt;
                r,i=md5_hh(&lt;br /&gt;
                  i,m=md5_hh(&lt;br /&gt;
                    m,f,r,i,d[n+9],4,-640364487&lt;br /&gt;
                  ),f,r,d[n+12],11,-421815835&lt;br /&gt;
                ),m,f,d[n+15],16,530742520&lt;br /&gt;
              ),i,m,d[n+2],23,-995338651&lt;br /&gt;
            ),r=md5_ii(&lt;br /&gt;
              r,i=md5_ii(&lt;br /&gt;
                i,m=md5_ii(&lt;br /&gt;
                  m,f,r,i,d[n+0],6,-198630844&lt;br /&gt;
                ),f,r,d[n+7],10,1126891415&lt;br /&gt;
              ),m,f,d[n+14],15,-1416354905&lt;br /&gt;
            ),i,m,d[n+5],21,-57434055&lt;br /&gt;
          ),r=md5_ii(&lt;br /&gt;
            r,i=md5_ii(&lt;br /&gt;
              i,m=md5_ii(&lt;br /&gt;
                m,f,r,i,d[n+12],6,1700485571&lt;br /&gt;
              ),f,r,d[n+3],10,-1894986606&lt;br /&gt;
            ),m,f,d[n+10],15,-1051523&lt;br /&gt;
          ),i,m,d[n+1],21,-2054922799&lt;br /&gt;
        ),r=md5_ii(&lt;br /&gt;
          r,i=md5_ii(&lt;br /&gt;
            i,m=md5_ii(&lt;br /&gt;
              m,f,r,i,d[n+8],6,1873313359&lt;br /&gt;
            ),f,r,d[n+15],10,-30611744&lt;br /&gt;
          ),m,f,d[n+6],15,-1560198380&lt;br /&gt;
        ),i,m,d[n+13],21,1309151649&lt;br /&gt;
      ),r=md5_ii(&lt;br /&gt;
        r,i=md5_ii(&lt;br /&gt;
          i,m=md5_ii(&lt;br /&gt;
            m,f,r,i,d[n+4],6,-145523070&lt;br /&gt;
          ),f,r,d[n+11],10,-1120210379&lt;br /&gt;
        ),m,f,d[n+2],15,718787259&lt;br /&gt;
      ),i,m,d[n+9],21,-343485551&lt;br /&gt;
    ),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)&lt;br /&gt;
  }&lt;br /&gt;
  return Array(m,f,r,i)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_cmn(d,_,m,f,r,i) {&lt;br /&gt;
  return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ff(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;m|~_&amp;amp;f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_gg(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_&amp;amp;f|m&amp;amp;~f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_hh(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(_^m^f,d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function md5_ii(d,_,m,f,r,i,n) {&lt;br /&gt;
  return md5_cmn(m^(_|~f),d,_,r,i,n)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function safe_add(d,_) {&lt;br /&gt;
  var m=(65535&amp;amp;d)+(65535&amp;amp;_);&lt;br /&gt;
  return(d&amp;gt;&amp;gt;16)+(_&amp;gt;&amp;gt;16)+(m&amp;gt;&amp;gt;16)&amp;lt;&amp;lt;16|65535&amp;amp;m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function bit_rol(d,_) {&lt;br /&gt;
  return d&amp;lt;&amp;lt;_|d&amp;gt;&amp;gt;&amp;gt;32-_&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var UUID = function(s) {&lt;br /&gt;
  return s.substring(0,8) + '-' + s.substring(8,12) + '-' + s.substring(12,16) + '-' + s.substring(16,20) + '-' + s.substring(20)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
ImmutableID.addValue(UUID(MD5(eduPersonPrincipalName.getValues().get(0))));&lt;br /&gt;
        ]]&amp;gt;&amp;lt;/Script&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeDefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
    &amp;lt;!--      Data Connectors                       --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- ========================================== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;myLDAP&amp;quot; xsi:type=&amp;quot;LDAPDirectory&amp;quot;&lt;br /&gt;
        ldapURL=&amp;quot;%{idp.attribute.resolver.LDAP.ldapURL}&amp;quot;&lt;br /&gt;
        baseDN=&amp;quot;%{idp.attribute.resolver.LDAP.baseDN}&amp;quot; &lt;br /&gt;
        principal=&amp;quot;%{idp.attribute.resolver.LDAP.bindDN}&amp;quot;&lt;br /&gt;
        principalCredential=&amp;quot;%{idp.attribute.resolver.LDAP.bindDNCredential}&amp;quot;&lt;br /&gt;
        useStartTLS=&amp;quot;%{idp.attribute.resolver.LDAP.useStartTLS:true}&amp;quot;&lt;br /&gt;
        connectTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.connectTimeout}&amp;quot;&lt;br /&gt;
                trustFile=&amp;quot;%{idp.attribute.resolver.LDAP.trustCertificates}&amp;quot;&lt;br /&gt;
        responseTimeout=&amp;quot;%{idp.attribute.resolver.LDAP.responseTimeout}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;![CDATA[&lt;br /&gt;
                %{idp.attribute.resolver.LDAP.searchFilter}&lt;br /&gt;
            ]]&amp;gt;&lt;br /&gt;
        &amp;lt;/FilterTemplate&amp;gt;&lt;br /&gt;
            &amp;lt;ConnectionPool&lt;br /&gt;
            minPoolSize=&amp;quot;%{idp.pool.LDAP.minSize:3}&amp;quot;&lt;br /&gt;
            maxPoolSize=&amp;quot;%{idp.pool.LDAP.maxSize:10}&amp;quot;&lt;br /&gt;
            blockWaitTime=&amp;quot;%{idp.pool.LDAP.blockWaitTime:PT3S}&amp;quot;&lt;br /&gt;
            validatePeriodically=&amp;quot;%{idp.pool.LDAP.validatePeriodically:true}&amp;quot;&lt;br /&gt;
            validateTimerPeriod=&amp;quot;%{idp.pool.LDAP.validatePeriod:PT5M}&amp;quot;&lt;br /&gt;
            expirationTime=&amp;quot;%{idp.pool.LDAP.idleTime:PT10M}&amp;quot;&lt;br /&gt;
            failFastInitialize=&amp;quot;%{idp.pool.LDAP.failFastInitialize:false}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;DataConnector id=&amp;quot;computed&amp;quot; xsi:type=&amp;quot;ComputedId&amp;quot;&lt;br /&gt;
                   generatedAttributeID=&amp;quot;computedId&amp;quot;&lt;br /&gt;
                   salt=&amp;quot;%{idp.persistentId.salt}&amp;quot;&lt;br /&gt;
                   algorithm=&amp;quot;%{idp.persistentId.algorithm:SHA}&amp;quot;&lt;br /&gt;
                   encoding=&amp;quot;%{idp.persistentId.encoding:BASE32}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;InputDataConnector ref=&amp;quot;myLDAP&amp;quot; attributeNames=&amp;quot;%{idp.persistentId.sourceAttribute}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataConnector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeResolver&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha anonymous LDAP keresést akarunk használni, akkor a &amp;lt;code&amp;gt;principal&amp;lt;/code&amp;gt; és &amp;lt;code&amp;gt;principalCredential&amp;lt;/code&amp;gt; paramétereket törölni kell a myLDAP DataConnector-ból.&lt;br /&gt;
&lt;br /&gt;
=== Attribútum kiadás beállítása ===&lt;br /&gt;
&lt;br /&gt;
Az IdP-nek ki kell adnia az &amp;lt;code&amp;gt;ImmutableID&amp;lt;/code&amp;gt; és az &amp;lt;code&amp;gt;IDPEmail&amp;lt;/code&amp;gt; attribútumokat a Microsoft-nak. Ezért létre kell hozni egy új &amp;lt;code&amp;gt;AttributeFilterPolicy&amp;lt;/code&amp;gt; szabályt a &amp;lt;code&amp;gt;conf/attribute-filter.xml&amp;lt;/code&amp;gt; fájlban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Office 365 ImmutableID and IDPEmail --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;AttributeFilterPolicy id=&amp;quot;PolicyForWindowsAzureAD&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;PolicyRequirementRule xsi:type=&amp;quot;Requester&amp;quot; value=&amp;quot;urn:federation:MicrosoftOnline&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;IDPEmail&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;AttributeRule attributeID=&amp;quot;ImmutableID&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;PermitValueRule xsi:type=&amp;quot;ANY&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/AttributeRule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/AttributeFilterPolicy&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A properties fájlok beállításai ===&lt;br /&gt;
&lt;br /&gt;
'''conf/idp.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.session.StorageService = shibboleth.StorageService&lt;br /&gt;
idp.session.trackSPSessions = true&lt;br /&gt;
idp.session.secondaryServiceIndex = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/ldap.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.authn.LDAP.ldapURL = ldap://ldap.example.com&lt;br /&gt;
idp.authn.LDAP.useStartTLS = true&lt;br /&gt;
idp.authn.LDAP.sslConfig = certificateTrust&lt;br /&gt;
# idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore&lt;br /&gt;
idp.authn.LDAP.returnAttributes = uid,mail,eduPersonPrincipalName&lt;br /&gt;
idp.authn.LDAP.baseDN = ou=People,dc=example,dc=com&lt;br /&gt;
idp.authn.LDAP.userFilter = (|(uid={user})(mail={user}))&lt;br /&gt;
# idp.authn.LDAP.bindDN = uid=myservice,ou=system&lt;br /&gt;
# idp.authn.LDAP.bindDNCredential = myServicePassword&lt;br /&gt;
idp.authn.LDAP.dnFormat = uid=%s,ou=People,dc=example,dc=com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''conf/saml-nameid.properties'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idp.nameid.saml2.default = urn:oasis:names:tc:SAML:2.0:nameid-format:transient&lt;br /&gt;
idp.nameid.saml1.default = urn:mace:shibboleth:1.0:nameIdentifier&lt;br /&gt;
idp.transientId.generator = shibboleth.CryptoTransientIdGenerator&lt;br /&gt;
idp.persistentId.sourceAttribute = eduPersonPrincipalName&lt;br /&gt;
idp.persistentId.useUnfilteredAttributes = true&lt;br /&gt;
idp.persistentId.salt = XXX_secret_salt_XXX&lt;br /&gt;
idp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Docker image készítése ===&lt;br /&gt;
&lt;br /&gt;
Hozzunk létre egy &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;-t ott, ahol a &amp;lt;code&amp;gt;customized-shibboleth-idp&amp;lt;/code&amp;gt; mappa található, az alábbi tartalommal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FROM       unicon/shibboleth-idp&lt;br /&gt;
MAINTAINER John Doe &amp;lt;john.doe@example.com&amp;gt;&lt;br /&gt;
ADD        customized-shibboleth-idp/ /opt/shibboleth-idp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Készítsük el az image fájlt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker build -t example-com/idp-shib .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indítsuk el az új IdP-t. A 4443-as és 8443-as portokat adjuk ki, és ne feledjük az előzőleg az SSL kulcsok számára beállított jelszavakat sem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# docker run -it --rm \&lt;br /&gt;
  -p 4443:4443 \&lt;br /&gt;
  -p 8443:8443 \&lt;br /&gt;
  --network bridge \&lt;br /&gt;
  -e JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  -e JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \&lt;br /&gt;
  example-com/idp-shib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== További leírások ===&lt;br /&gt;
&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]&lt;br /&gt;
* [https://wiki.sunet.se/display/SWAMID/How+to+use+Shibboleth+Identity+Provider+v3+with+Office+365 How to use Shibboleth Identity Provider v3 with Office 365]&lt;br /&gt;
&lt;br /&gt;
[[Category: AAI]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SimpleSAMLphp]]&lt;br /&gt;
[[Category: Shibboleth]]&lt;/div&gt;</summary>
		<author><name>Ecsedi(AT)unideb.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4511</id>
		<title>O365 SAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4511"/>
				<updated>2020-02-23T11:24:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ecsedi(AT)unideb.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az Office365 szolgáltatások SAML azonosítással történő használatához egy új SP-t kell konfigurálni az IdP konfigurációjában, mivel ez az SP nem szerepel a föderációs metaadatok között. A Microsoft által üzemeltetett SP-nek speciális attribútum igényei vannak:&lt;br /&gt;
* perzisztens NameID-t kell küldeni ('''ImmutableID''')&lt;br /&gt;
* kell küldeni egy '''IDPEmail''' nevű attribútumot&lt;br /&gt;
&lt;br /&gt;
== Kiadott attribútumok ==&lt;br /&gt;
=== ImmutableID ===&lt;br /&gt;
Az ImmutableID az eduPersonPrincipalName attribútum MD5 hashének UUID formátumra konvertált változata.&lt;br /&gt;
&lt;br /&gt;
=== IDPEmail ===&lt;br /&gt;
A kiadott e-mail értéknek meg kell egyeznie az Office365 által szolgáltatott e-mail címmel. Ez azt is jelenti, hogy az IdP-től kapott e-mail attribútum domain részét előzetesen validálni kell az Office365-ben.&lt;br /&gt;
&lt;br /&gt;
== SimpleSAMLphp ==&lt;br /&gt;
A &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ba kell elhelyezni a következő bejegyzést:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  'entityid' =&amp;gt; 'urn:federation:MicrosoftOnline',&lt;br /&gt;
&lt;br /&gt;
  // Expose both required attributes &lt;br /&gt;
  'attributes' =&amp;gt; array('IDPEmail', 'ImmutableID'),&lt;br /&gt;
  'attributes.NameFormat' =&amp;gt; &amp;quot;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  // Configure attribute mapping and ImmutableID generation&lt;br /&gt;
  'authproc' =&amp;gt; array(&lt;br /&gt;
    31 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:PHP',&lt;br /&gt;
      'code' =&amp;gt; '&lt;br /&gt;
        $eppn = $attributes[&amp;quot;eduPersonPrincipalName&amp;quot;][0];&lt;br /&gt;
        $chunks = str_split(md5($eppn), 4);        &lt;br /&gt;
        $attributes[&amp;quot;ImmutableID&amp;quot;][0] = vsprintf(&amp;quot;%s%s-%s-%s-%s-%s%s%s&amp;quot;, $chunks);&lt;br /&gt;
      ',&lt;br /&gt;
    ),&lt;br /&gt;
        36 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:AttributeMap',&lt;br /&gt;
      'mail' =&amp;gt; 'IDPEmail',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  // Send ImmutableID as a &amp;quot;persistent&amp;quot; NameID&lt;br /&gt;
  'NameIDFormat' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',&lt;br /&gt;
  'simplesaml.nameidattribute' =&amp;gt; 'ImmutableID',&lt;br /&gt;
&lt;br /&gt;
  'contacts' =&amp;gt; array(),&lt;br /&gt;
  'metadata-set' =&amp;gt; 'saml20-sp-remote',&lt;br /&gt;
&lt;br /&gt;
  'AssertionConsumerService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 0,&lt;br /&gt;
      'isDefault' =&amp;gt; true,&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 1,&lt;br /&gt;
    ),&lt;br /&gt;
    2 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:PAOS',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 2,&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'SingleLogoutService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt;&lt;br /&gt;
    array(&lt;br /&gt;
    'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
    'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  'keys' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUz&lt;br /&gt;
        NDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYD&lt;br /&gt;
        KgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8&lt;br /&gt;
        fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0&lt;br /&gt;
        eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B&lt;br /&gt;
        5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4b&lt;br /&gt;
        PPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mM&lt;br /&gt;
        UqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQ&lt;br /&gt;
        s6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyv&lt;br /&gt;
        f2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52W&lt;br /&gt;
        oM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tq&lt;br /&gt;
        zHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpx&lt;br /&gt;
        SDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYi&lt;br /&gt;
        kA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5q&lt;br /&gt;
        K3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx&lt;br /&gt;
        2ZDQaQ==',&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJAKLDsqkylLefMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDEwMTAxODE2&lt;br /&gt;
        MTNaFw0xOTEwMDkxODE2MTNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7A&lt;br /&gt;
        3m6uvOxEsX+NlB1hnflaR8DJj597wY3qyh/FX4O6rKvU2leAfINmBWcjEFApCKi9&lt;br /&gt;
        p5uIaZpNlDpPQ+R3BaZx+4NhHbOMpeWlpIiZHL61lwbulzurffUPhtzQNHAVzOBk&lt;br /&gt;
        ZsOgN9BD/hOleU//d+IXz08ateUb3Ip2vyaodilYQDDi5M9yOhanv1cO1Usjo2xT&lt;br /&gt;
        LfiK+TVygu+8bo+/8JHGPRy6pnghng970DRBDkVrKzozlrnmMesdSrtuCnsgyRbE&lt;br /&gt;
        XckxaQ8S2nDYyFqBI0PkcBW8+0akdFWW58Os5cGbPFeHi6vtZCR5pWw5pnqtuoip&lt;br /&gt;
        rdk9jg1axT3vwu+RVdcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUBjNylGJBvkAY/4yI&lt;br /&gt;
        IoD00R6p5hIwWQYDVR0jBFIwUIAUBjNylGJBvkAY/4yIIoD00R6p5hKhLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAKLDsqky&lt;br /&gt;
        lLefMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAQGZUlJ3zzJvy1OLd&lt;br /&gt;
        tV3NTYHlbVHm3Fty17xqW9Ui8GE8sEWeUdHA6eURNNpNpd+gAGC6Tp+k+cU1LlPw&lt;br /&gt;
        Xm7BAATJ/2DjY8tzRc6r6EneQWRkIa8xpbvknXvUml6iFgo2ofOWLaFk6XpQ64MA&lt;br /&gt;
        O35wv9XEARNabJ9wJSRSevUigAx2U2GvaorV5PgqHImiKTSrL0K6j8B4OqXWUqP0&lt;br /&gt;
        KGf7pCdGlrq2XEl95N2zj8n/scvA9JasImztsVlZ+WxeF+OAMvWQQFc54gC6lwWc&lt;br /&gt;
        8kno8vPn3lwxVkTU0o9wcHnOhNi2hzVDV85sz7P9dOZYF73uy1uLshdjCcwlmQ2l&lt;br /&gt;
        A9OV9w==',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'saml20.sign.assertion' =&amp;gt; true,&lt;br /&gt;
   // This metadata does not contain an encryption key,&lt;br /&gt;
   // therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.&lt;br /&gt;
  'assertion.encryption' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ECP (Enhanced Client or Proxy) ==&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.&lt;br /&gt;
Ehhez a &amp;lt;code&amp;gt;metadata/saml20-idp-hosted.php&amp;lt;/code&amp;gt; file-ba fel kell venni az IdP metaadatai közé egy&lt;br /&gt;
&amp;lt;code&amp;gt;'saml20.ecp'&amp;lt;/code&amp;gt; elemet &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; értékkel, illetve az SP metaadatokhoz is hozzá kell&lt;br /&gt;
adni két beállítást a &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  // ...&lt;br /&gt;
  'signature.algorithm'  =&amp;gt; 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',&lt;br /&gt;
  'saml20.sign.response' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shibboleth ==&lt;br /&gt;
{{TODO|Itt találhatók leírások:&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://wiki.sunet.se/display/SWAMID/How+to+use+Shibboleth+Identity+Provider+v3+with+Office+365 How to use Shibboleth Identity Provider v3 with Office 365]}}&lt;br /&gt;
&lt;br /&gt;
[[Category: AAI]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SimpleSAMLphp]]&lt;br /&gt;
[[Category: Shibboleth]]&lt;/div&gt;</summary>
		<author><name>Ecsedi(AT)unideb.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4510</id>
		<title>O365 SAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=O365_SAML&amp;diff=4510"/>
				<updated>2020-02-21T13:01:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ecsedi(AT)unideb.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az Office365 szolgáltatások SAML azonosítással történő használatához egy új SP-t kell konfigurálni az IdP konfigurációjában, mivel ez az SP nem szerepel a föderációs metaadatok között. A Microsoft által üzemeltetett SP-nek speciális attribútum igényei vannak:&lt;br /&gt;
* perzisztens NameID-t kell küldeni ('''ImmutableID''')&lt;br /&gt;
* kell küldeni egy '''IDPEmail''' nevű attribútumot&lt;br /&gt;
&lt;br /&gt;
== Kiadott attribútumok ==&lt;br /&gt;
=== ImmutableID ===&lt;br /&gt;
Az ImmutableID az eduPersonPrincipalName attribútum MD5 hashének UUID formátumra konvertált változata.&lt;br /&gt;
&lt;br /&gt;
=== IDPEmail ===&lt;br /&gt;
A kiadott e-mail értéknek meg kell egyeznie az Office365 által szolgáltatott e-mail címmel. Ez azt is jelenti, hogy az IdP-től kapott e-mail attribútum domain részét előzetesen validálni kell az Office365-ben.&lt;br /&gt;
&lt;br /&gt;
== SimpleSAMLphp ==&lt;br /&gt;
A &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ba kell elhelyezni a következő bejegyzést:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  'entityid' =&amp;gt; 'urn:federation:MicrosoftOnline',&lt;br /&gt;
&lt;br /&gt;
  // Expose both required attributes &lt;br /&gt;
  'attributes' =&amp;gt; array('IDPEmail', 'ImmutableID'),&lt;br /&gt;
  'attributes.NameFormat' =&amp;gt; &amp;quot;urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  // Configure attribute mapping and ImmutableID generation&lt;br /&gt;
  'authproc' =&amp;gt; array(&lt;br /&gt;
    31 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:PHP',&lt;br /&gt;
      'code' =&amp;gt; '&lt;br /&gt;
        $eppn = $attributes[&amp;quot;eduPersonPrincipalName&amp;quot;][0];&lt;br /&gt;
        $chunks = str_split(md5($eppn), 4);        &lt;br /&gt;
        $attributes[&amp;quot;ImmutableID&amp;quot;][0] = vsprintf(&amp;quot;%s%s-%s-%s-%s-%s%s%s&amp;quot;, $chunks);&lt;br /&gt;
      ',&lt;br /&gt;
    ),&lt;br /&gt;
        36 =&amp;gt; array(&lt;br /&gt;
      'class' =&amp;gt; 'core:AttributeMap',&lt;br /&gt;
      'mail' =&amp;gt; 'IDPEmail',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  // Send ImmutableID as a &amp;quot;persistent&amp;quot; NameID&lt;br /&gt;
  'NameIDFormat' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',&lt;br /&gt;
  'simplesaml.nameidattribute' =&amp;gt; 'ImmutableID',&lt;br /&gt;
&lt;br /&gt;
  'contacts' =&amp;gt; array(),&lt;br /&gt;
  'metadata-set' =&amp;gt; 'saml20-sp-remote',&lt;br /&gt;
&lt;br /&gt;
  'AssertionConsumerService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 0,&lt;br /&gt;
      'isDefault' =&amp;gt; true,&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 1,&lt;br /&gt;
    ),&lt;br /&gt;
    2 =&amp;gt; array(&lt;br /&gt;
      'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:PAOS',&lt;br /&gt;
      'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
      'index' =&amp;gt; 2,&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'SingleLogoutService' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt;&lt;br /&gt;
    array(&lt;br /&gt;
    'Binding' =&amp;gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',&lt;br /&gt;
    'Location' =&amp;gt; 'https://login.microsoftonline.com/login.srf',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
  'keys' =&amp;gt; array(&lt;br /&gt;
    0 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJALLJPAyvf2sjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDA3MTgxOTUz&lt;br /&gt;
        NDBaFw0xOTA3MTcxOTUzNDBaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYD&lt;br /&gt;
        KgByFZdqtTnnpF4IfIp4i2XLg2rLIo+mu4DmW9gRLlBJCNc7YESUxpKzuFYaANd8&lt;br /&gt;
        fWsDigJZTXbhOQApSpw4xXFnor2vJ1zm94LtqjcVEXTjUml5gAIS4pwuOU3ZfO/0&lt;br /&gt;
        eTG0gDYp4a0L/mzzTRsnwe/8WMPIE75Bq2zAyAZ9aePvl3QX7cXYLPfeK4QTgK3B&lt;br /&gt;
        5lwe1wWu3y5oQidjcSok8Frf80xzuCYuOa+ZUK3JibpLLCrT4uwiqf+KREDSdc4b&lt;br /&gt;
        PPlq0PWI4sQr1tha8yypRSvOH+/MxcfSRSnl6Uc+gm8nVEEWWIu4hhu6NIfG91mM&lt;br /&gt;
        UqJuzkgLCi6Gov6JS8UCAwEAAaOBijCBhzAdBgNVHQ4EFgQUnQoq7sI3R8rde4sQ&lt;br /&gt;
        s6nGEbJm3LcwWQYDVR0jBFIwUIAUnQoq7sI3R8rde4sQs6nGEbJm3LehLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJALLJPAyv&lt;br /&gt;
        f2sjMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAf4jaNhKzRG3k+52W&lt;br /&gt;
        oM9nnISP7rlWIeWwH6EQGUlF6ozSP/03gYMAdqpdhww5zNwKzi7TQVbDC0pgq/tq&lt;br /&gt;
        zHv6JEI0R4B6h7/TJ1pYPxdvIFQrE27RHESltH/m+5UkVnayLqRD3/fi4zf4aEpx&lt;br /&gt;
        SDZ73MCR5LanPGqvlAMz29AL3g1ynj+eu7xMfFsM/8+qJaCXuxT5/30eeLEe+PYi&lt;br /&gt;
        kA/PhEwp+qkDQWPvdAwEghuUaFvtKAgDZierjpGzHZnYkXTTDTHVe1iP7tsAJH5q&lt;br /&gt;
        K3qdcv3UGPyZrjC/lietJcAcnwVoZQ93v2ieGfcKKN+PFN9M59/BkPo62HPoGNNx&lt;br /&gt;
        2ZDQaQ==',&lt;br /&gt;
    ),&lt;br /&gt;
    1 =&amp;gt; array(&lt;br /&gt;
      'encryption' =&amp;gt; false,&lt;br /&gt;
      'signing' =&amp;gt; true,&lt;br /&gt;
      'type' =&amp;gt; 'X509Certificate',&lt;br /&gt;
      'X509Certificate' =&amp;gt; 'MIIDYDCCAkigAwIBAgIJAKLDsqkylLefMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV&lt;br /&gt;
        BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNDEwMTAxODE2&lt;br /&gt;
        MTNaFw0xOTEwMDkxODE2MTNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p&lt;br /&gt;
        bmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7A&lt;br /&gt;
        3m6uvOxEsX+NlB1hnflaR8DJj597wY3qyh/FX4O6rKvU2leAfINmBWcjEFApCKi9&lt;br /&gt;
        p5uIaZpNlDpPQ+R3BaZx+4NhHbOMpeWlpIiZHL61lwbulzurffUPhtzQNHAVzOBk&lt;br /&gt;
        ZsOgN9BD/hOleU//d+IXz08ateUb3Ip2vyaodilYQDDi5M9yOhanv1cO1Usjo2xT&lt;br /&gt;
        LfiK+TVygu+8bo+/8JHGPRy6pnghng970DRBDkVrKzozlrnmMesdSrtuCnsgyRbE&lt;br /&gt;
        XckxaQ8S2nDYyFqBI0PkcBW8+0akdFWW58Os5cGbPFeHi6vtZCR5pWw5pnqtuoip&lt;br /&gt;
        rdk9jg1axT3vwu+RVdcCAwEAAaOBijCBhzAdBgNVHQ4EFgQUBjNylGJBvkAY/4yI&lt;br /&gt;
        IoD00R6p5hIwWQYDVR0jBFIwUIAUBjNylGJBvkAY/4yIIoD00R6p5hKhLaQrMCkx&lt;br /&gt;
        JzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAKLDsqky&lt;br /&gt;
        lLefMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEAQGZUlJ3zzJvy1OLd&lt;br /&gt;
        tV3NTYHlbVHm3Fty17xqW9Ui8GE8sEWeUdHA6eURNNpNpd+gAGC6Tp+k+cU1LlPw&lt;br /&gt;
        Xm7BAATJ/2DjY8tzRc6r6EneQWRkIa8xpbvknXvUml6iFgo2ofOWLaFk6XpQ64MA&lt;br /&gt;
        O35wv9XEARNabJ9wJSRSevUigAx2U2GvaorV5PgqHImiKTSrL0K6j8B4OqXWUqP0&lt;br /&gt;
        KGf7pCdGlrq2XEl95N2zj8n/scvA9JasImztsVlZ+WxeF+OAMvWQQFc54gC6lwWc&lt;br /&gt;
        8kno8vPn3lwxVkTU0o9wcHnOhNi2hzVDV85sz7P9dOZYF73uy1uLshdjCcwlmQ2l&lt;br /&gt;
        A9OV9w==',&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
  'saml20.sign.assertion' =&amp;gt; true,&lt;br /&gt;
   // This metadata does not contain an encryption key,&lt;br /&gt;
   // therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.&lt;br /&gt;
  'assertion.encryption' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ECP (Enhanced Client or Proxy) ==&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.&lt;br /&gt;
Ehhez a &amp;lt;code&amp;gt;metadata/saml20-idp-hosted.php&amp;lt;/code&amp;gt; file-ba fel kell venni az IdP metaadatai közé egy&lt;br /&gt;
&amp;lt;code&amp;gt;'saml20.ecp'&amp;lt;/code&amp;gt; elemet &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; értékkel, illetve az SP metaadatokhoz is hozzá kell&lt;br /&gt;
adni két beállítást a &amp;lt;code&amp;gt;metadata/saml20-sp-remote.php&amp;lt;/code&amp;gt; file-ban:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * Office 365&lt;br /&gt;
 * https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml&lt;br /&gt;
 */&lt;br /&gt;
$metadata['urn:federation:MicrosoftOnline'] = array(&lt;br /&gt;
  // ...&lt;br /&gt;
  'signature.algorithm'  =&amp;gt; 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',&lt;br /&gt;
  'saml20.sign.response' =&amp;gt; false,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shibboleth ==&lt;br /&gt;
{{TODO|A leírás itt található: [https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]}}&lt;br /&gt;
&lt;br /&gt;
[[Category: AAI]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SimpleSAMLphp]]&lt;br /&gt;
[[Category: Shibboleth]]&lt;/div&gt;</summary>
		<author><name>Ecsedi(AT)unideb.hu</name></author>	</entry>

	</feed>