Módosítások

O365 SAML

24 004 bájt hozzáadva, 2020. február 27., 10:06
nincs szerkesztési összefoglaló
),
'saml20.sign.assertion' => true,
// This metadata does not contain an encryption key,
// therefore explicitly disabling assertion encryption so it does not depend on global IDP settings.
'assertion.encryption' => false,
);
</source>
 
=== ECP (Enhanced Client or Proxy) ===
 
Ha szeretnénk elérni az Office365 levelezést IMAP-on keresztül, akkor be kell kapcsolni még az ECP-t is.
Ehhez a <code>metadata/saml20-idp-hosted.php</code> file-ba fel kell venni az IdP metaadatai közé egy
<code>'saml20.ecp'</code> elemet <code>true</code> értékkel, illetve az SP metaadatokhoz is hozzá kell
adni két beállítást a <code>metadata/saml20-sp-remote.php</code> file-ban:
 
<source lang="php">
/*
* Office 365
* https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml
*/
$metadata['urn:federation:MicrosoftOnline'] = array(
// ...
'signature.algorithm' => 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',
'saml20.sign.response' => false,
);
</source>
== Shibboleth ==
 Egy unicon/shibboleth-idp alapú docker image készítését mutatjuk be az alábbiakban. === Kezdeti IdP konfiguráció === <pre># docker run -it -v $(pwd):/ext-mount --rm unicon/shibboleth-idp init-idp.sh Please complete the following for your IdP environment:Hostname: [64ed9b77b493.localdomain]idp.example.comSAML EntityID: [https://idp.example.com/idp/shibboleth]https://idp.example.com:4443/idp/shibbolethAttribute Scope: [localdomain]example.comBackchannel PKCS12 Password: XXXsecretXXXRe-enter password: XXXsecretXXXCookie Encryption Key Password: XXXsecretXXXRe-enter password: XXXsecretXXXWarning: /opt/shibboleth-idp-tmp/bin does not exist.Warning: /opt/shibboleth-idp-tmp/edit-webapp does not exist.Warning: /opt/shibboleth-idp-tmp/dist does not exist.Warning: /opt/shibboleth-idp-tmp/doc does not exist.Warning: /opt/shibboleth-idp-tmp/system does not exist.Generating Signing Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ......doneCreating Encryption Key, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ......doneCreating Backchannel keystore, CN = idp.example.com URI = https://idp.example.com:4443/idp/shibboleth ......doneCreating cookie encryption key files......doneRebuilding /opt/shibboleth-idp-tmp/war/idp.war ......done BUILD SUCCESSFULTotal time: 7 minutes 4 secondsA basic Shibboleth IdP config and UI has been copied to ./customized-shibboleth-idp/ (assuming thedefault volume mapping was used).Most files, if not being customized can be removed from what was exported/the local Docker image andbaseline files will be used.</pre> Keletkezik egy <code>customized-shibboleth-idp</code> mappa a következő szerkezettel: * conf* credentials* metadata* views* views/admin* views/client-storage* views/intercept* webapp* webapp/css* webapp/images Az alábbi fájlokat kell majd módosítani: * conf/attribute-filter.xml* conf/attribute-resolver.xml* conf/idp.properties* conf/ldap.properties* conf/metadata-providers.xml* conf/relying-party.xml* conf/saml-nameid.properties* conf/saml-nameid.xml* metadata/idp-metadata.xml Néhány másik fájlt pedig létre kell hozni: * credentials/idp-browser.p12 (webserver SSL key/cert)* credentials/ldap-server.crt (LDAP server certificate)* metadata/federationmetadata.xml (Office 365 federation metadata) Mivel ebben a példában az IdP-t a 4443-as porton fogjuk elérni, ezért ellenőrizni kell minden <code>Location</code> paramétert a <code>metadata/idp-metadata.xml</code> fájlban, hogy jó helyre mutat-e. Továbbá engedélyezni kell a <code>SingleLogoutService</code> bejegyzéseket (amelyek alapból ki vannak iktatva). === A webszerver tanúsítvány előkészítése === 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: <pre># cat webserver.crt intermediate_ca.crt > cert-chain.txt# openssl pkcs12 -export -inkey webserver.key -in cert-chain.txt -out idp-browser.p12Enter Export Password: XXX_secret_XXXVerifying - Enter Export Password: XXX_secret_XXX</pre> Az előállított <code>idp-browser.p12</code> fájlt másoljuk be a <code>credentials</code> mappába. === Microsoft SAML SP metadata és föderációs beállítások === Töltsük le a Microsoft SAML2 SP metaadatait a <code>metadata</code> könyvtárba: <pre># wget https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml</pre> Készítsünk egy MetadataProvider-t a <code>conf/metadata-providers.xml</code> fájlban: <source lang="xml"><MetadataProvider id="MicrosoftOnline" xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/federationmetadata.xml"/></source> A <code>conf/relying-party.xml</code> 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): <source lang="xml"><util:list id="shibboleth.RelyingPartyOverrides"> <bean parent="RelyingPartyByName" c:relyingPartyIds="urn:federation:MicrosoftOnline"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:encryptAssertions="false" /> <bean parent="SAML2.ECP" p:encryptAssertions="false" p:signAssertions="true" p:signResponses="false" p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" /> </list> </property> </bean></util:list></source> Az Office 365 megköveteli a SAML2 <code>NameID</code> használatát, amiben ugyanazt az értéket várja, mint ami az <code>ImmutableID</code> attribútumban van. Ezt a <code>conf/saml-nameid.xml</code> fájlban kell beállítani: <source lang="xml"><!-- SAML 2 NameID Generation --><util:list id="shibboleth.SAML2NameIDGenerators">  <ref bean="shibboleth.SAML2TransientGenerator" /> <ref bean="shibboleth.SAML2PersistentGenerator" /> <!-- Persistent ID Generator for all entities except Microsoft --><bean parent="shibboleth.SAML2PersistentGenerator"> <property name="activationCondition"> <bean parent="shibboleth.Conditions.NOT"> <constructor-arg> <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{'urn:federation:MicrosoftOnline'}}" /> </constructor-arg> </bean> </property></bean> <!-- Persistent ID Generator for Microsoft --><bean parent="shibboleth.SAML2AttributeSourcedGenerator" p:format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" p:attributeSourceIds="#{ {'ImmutableID'} }"> <property name="activationCondition"> <bean parent="shibboleth.Conditions.RelyingPartyId" c:candidates="#{{TODO'urn:federation:MicrosoftOnline'}}" /> </property></bean> </util:list></source> === LDAP adatforrás beállítása === Mentsük el az LDAP szerver tanúsítványát PEM formátumban a <code>credentials/ldap-server.crt</code> fájlba. Az Office 365 két attriútum kiadását kéri: <code>IDPEmail</code> és <code>ImmutableID</code>. Az <code>IDPEmail</code> értékének meg kell egyeznie a felhasználó Office 365-ös <code>UserPrincipalName</code> attribútumával (ami egyben a hivatalos (elsődleges) felhős email címe). Az <code>ImmutableID</code> esetünkben az <code>eduPerosnPrincilapName</code> MD5 hash értékének UUID formátumra konvertált változata lesz, amelyet egy javasccript segítségével képezünk. Cseréljük le a <code>conf/attribute-resolver.xml</code> fájlt a <code>conf/attribute-resolver-full.xml</code> nevűvel. <pre># mv conf/attribute-resolver-full.xml conf/attribute-resolver.xml</pre> Az <code>attribute-resolver.xml</code> fájlban beállítunk néhány attribútumot és az LDAP adatforrást. Az <code>ImmutableID</code> egy Shibboleth <code>ScriptedAttribute</code> lesz, ami egy javasccript segítségével fogja előállítani az attribútum értékét az <code>eduPersonPrincipalName</code> 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ú. <source lang="xml"><?xml version="1.0" encoding="UTF-8"?> <AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">  <!-- ========================================== --> <!-- Attribute Definitions --> <!-- ========================================== -->  <AttributeDefinition xsi:type="Simple" id="uid"> <InputDataConnector ref="myLDAP" attributeNames="uid"/> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" /> </AttributeDefinition>  <AttributeDefinition xsi:type="Simple" id="mail"> <InputDataConnector ref="myLDAP" attributeNames="mail"/> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" /> </AttributeDefinition>  <AttributeDefinition xsi:type="Prescoped" id="eduPersonPrincipalName"> <InputDataConnector ref="myLDAP" attributeNames="eduPersonPrincipalName"/> <AttributeEncoder xsi:type="SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonPrincipalName" encodeType="false" /> <AttributeEncoder xsi:type="SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" friendlyName="eduPersonPrincipalName" encodeType="false" /> </AttributeDefinition>  <AttributeDefinition xsi:type="Simple" id="IDPEmail"> <InputDataConnector ref="myLDAP" attributeNames="mail"/> <AttributeEncoder xsi:type="SAML1String" name="IDPEmail" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="IDPEmail" friendlyName="IDPEmail" encodeType="false" /> </AttributeDefinition>  <AttributeDefinition xsi:type="ScriptedAttribute" id="ImmutableID"> <InputDataConnector ref="myLDAP" attributeNames="eduPersonPrincipalName" /> <AttributeEncoder xsi:type="SAML1String" name="ImmutableID" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="ImmutableID" friendlyName="ImmutableID" encodeType="false" /> <Script><![CDATA[var MD5 = function(d) { var r = M(V(Y(X(d),8*d.length))); return r.toLowerCase()}; function M(d) { for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_); return f} function X(d) { for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0; for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32; return _} function V(d) { for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255); return _} function Y(d,_) { d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_; for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16) { var h=m,t=f,g=r,e=i; f=md5_ii( f=md5_ii( f=md5_ii( f=md5_ii( f=md5_hh( f=md5_hh( f=md5_hh( f=md5_hh( f=md5_gg( f=md5_gg( f=md5_gg( f=md5_gg( f=md5_ff( f=md5_ff( f=md5_ff( f=md5_ff( f,r=md5_ff( r,i=md5_ff( i,m=md5_ff( m,f,r,i,d[n+0],7,-680876936 ),f,r,d[n+1],12,-389564586 ),m,f,d[n+2],17,606105819 ),i,m,d[n+3],22,-1044525330 ),r=md5_ff( r,i=md5_ff( i,m=md5_ff( m,f,r,i,d[n+4],7,-176418897 ),f,r,d[n+5],12,1200080426 ),m,f,d[n+6],17,-1473231341 ),i,m,d[n+7],22,-45705983 ),r=md5_ff( r,i=md5_ff( i,m=md5_ff( m,f,r,i,d[n+8],7,1770035416 ),f,r,d[n+9],12,-1958414417 ),m,f,d[n+10],17,-42063 ),i,m,d[n+11],22,-1990404162 ),r=md5_ff( r,i=md5_ff( i,m=md5_ff( m,f,r,i,d[n+12],7,1804603682 ),f,r,d[n+13],12,-40341101 ),m,f,d[n+14],17,-1502002290 ),i,m,d[n+15],22,1236535329 ),r=md5_gg( r,i=md5_gg( i,m=md5_gg( m,f,r,i,d[n+1],5,-165796510 ),f,r,d[n+6],9,-1069501632 ),m,f,d[n+11],14,643717713 ),i,m,d[n+0],20,-373897302 ),r=md5_gg( r,i=md5_gg( i,m=md5_gg( m,f,r,i,d[n+5],5,-701558691 ),f,r,d[n+10],9,38016083 ),m,f,d[n+15],14,-660478335 ),i,m,d[n+4],20,-405537848 ),r=md5_gg( r,i=md5_gg( i,m=md5_gg( m,f,r,i,d[n+9],5,568446438 ),f,r,d[n+14],9,-1019803690 ),m,f,d[n+3],14,-187363961 ),i,m,d[n+8],20,1163531501 ),r=md5_gg( r,i=md5_gg( i,m=md5_gg( m,f,r,i,d[n+13],5,-1444681467 ),f,r,d[n+2],9,-51403784 ),m,f,d[n+7],14,1735328473 ),i,m,d[n+12],20,-1926607734 ),r=md5_hh( r,i=md5_hh( i,m=md5_hh( m,f,r,i,d[n+5],4,-378558 ),f,r,d[n+8],11,-2022574463 ),m,f,d[n+11],16,1839030562 ),i,m,d[n+14],23,-35309556 ),r=md5_hh( r,i=md5_hh( i,m=md5_hh( m,f,r,i,d[n+1],4,-1530992060 ),f,r,d[n+4],11,1272893353 ),m,f,d[n+7],16,-155497632 ),i,m,d[n+10],23,-1094730640 ),r=md5_hh( r,i=md5_hh( i,m=md5_hh( m,f,r,i,d[n+13],4,681279174 ),f,r,d[n+0],11,-358537222 ),m,f,d[n+3],16,-722521979 ),i,m,d[n+6],23,76029189 ),r=md5_hh( r,i=md5_hh( i,m=md5_hh( m,f,r,i,d[n+9],4,-640364487 ),f,r,d[n+12],11,-421815835 ),m,f,d[n+15],16,530742520 ),i,m,d[n+2],23,-995338651 ),r=md5_ii( r,i=md5_ii( i,m=md5_ii( m,f,r,i,d[n+0],6,-198630844 ),f,r,d[n+7],10,1126891415 ),m,f,d[n+14],15,-1416354905 ),i,m,d[n+5],21,-57434055 ),r=md5_ii( r,i=md5_ii( i,m=md5_ii( m,f,r,i,d[n+12],6,1700485571 ),f,r,d[n+3],10,-1894986606 ),m,f,d[n+10],15,-1051523 ),i,m,d[n+1],21,-2054922799 ),r=md5_ii( r,i=md5_ii( i,m=md5_ii( m,f,r,i,d[n+8],6,1873313359 ),f,r,d[n+15],10,-30611744 ),m,f,d[n+6],15,-1560198380 ),i,m,d[n+13],21,1309151649 ),r=md5_ii( r,i=md5_ii( i,m=md5_ii( m,f,r,i,d[n+4],6,-145523070 ),f,r,d[n+11],10,-1120210379 ),m,f,d[n+2],15,718787259 ),i,m,d[n+9],21,-343485551 ),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e) } return Array(m,f,r,i)} function md5_cmn(d,_,m,f,r,i) { return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)} function md5_ff(d,_,m,f,r,i,n) { return md5_cmn(_&m|~_&f,d,_,r,i,n)} function md5_gg(d,_,m,f,r,i,n) { return md5_cmn(_&f|m&~f,d,_,r,i,n)} function md5_hh(d,_,m,f,r,i,n) { return md5_cmn(_^m^f,d,_,r,i,n)} function md5_ii(d,_,m,f,r,i,n) { return md5_cmn(m^(_|~f),d,_,r,i,n)} function safe_add(d,_) { var m=(65535&d)+(65535&_); return(d>>16)+(_>>16)+(m>>16)<<16|65535&m} function bit_rol(d,_) { return d<<_|d>>>32-_} var UUID = function(s) { return s.substring(0,8) + '-' + s.substring(8,12) + '-' + s.substring(12,16) + '-' + s.substring(16,20) + '-' + s.substring(20)}; ImmutableID.addValue(UUID(MD5(eduPersonPrincipalName.getValues().get(0)))); ]]></Script> </AttributeDefinition>  <!-- ========================================== --> <!-- Data Connectors --> <!-- ========================================== -->  <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" baseDN="%{idp.attribute.resolver.LDAP.baseDN}" principal="%{idp.attribute.resolver.LDAP.bindDN}" principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}" connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}" trustFile="%{idp.attribute.resolver.LDAP.trustCertificates}" responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}"> <FilterTemplate> <![CDATA[ %{idp.attribute.resolver.LDAP.searchFilter} ]]> </FilterTemplate> <ConnectionPool minPoolSize="%{idp.pool.LDAP.minSize:3}" maxPoolSize="%{idp.pool.LDAP.maxSize:10}" blockWaitTime="%{idp.pool.LDAP.blockWaitTime:PT3S}" validatePeriodically="%{idp.pool.LDAP.validatePeriodically:true}" validateTimerPeriod="%{idp.pool.LDAP.validatePeriod:PT5M}" expirationTime="%{idp.pool.LDAP.idleTime:PT10M}" failFastInitialize="%{idp.pool.LDAP.failFastInitialize:false}" /> </DataConnector>  <DataConnector id="computed" xsi:type="ComputedId" generatedAttributeID="computedId" salt="%{idp.persistentId.salt}" algorithm="%{idp.persistentId.algorithm:SHA}" encoding="%{idp.persistentId.encoding:BASE32}"> <InputDataConnector ref="myLDAP" attributeNames="%{idp.persistentId.sourceAttribute}" /> </DataConnector> </AttributeResolver></source> Ha anonymous LDAP keresést akarunk használni, akkor a <code>principal</code> és <code>principalCredential</code> paramétereket törölni kell a myLDAP DataConnector-ból. === Attribútum kiadás beállítása === Az IdP-nek ki kell adnia az <code>ImmutableID</code> és az <code>IDPEmail</code> attribútumokat a Microsoft-nak. Ezért létre kell hozni egy új <code>AttributeFilterPolicy</code> szabályt a <code>conf/attribute-filter.xml</code> fájlban: <source lang="xml"><!-- Office 365 ImmutableID and IDPEmail --> <AttributeFilterPolicy id="PolicyForWindowsAzureAD">  <PolicyRequirementRule xsi:type="Requester" value="urn:federation:MicrosoftOnline" />  <AttributeRule attributeID="IDPEmail"> <PermitValueRule xsi:type="ANY" /> </AttributeRule>  <AttributeRule attributeID="ImmutableID"> <PermitValueRule xsi:type="ANY" /> </AttributeRule> </AttributeFilterPolicy></source> === A leírás itt properties fájlok beállításai === '''conf/idp.properties''' <pre>idp.session.StorageService = shibboleth.StorageServiceidp.session.trackSPSessions = trueidp.session.secondaryServiceIndex = true</pre> '''conf/ldap.properties''' <pre>idp.authn.LDAP.ldapURL = ldap://ldap.example.comidp.authn.LDAP.useStartTLS = trueidp.authn.LDAP.sslConfig = certificateTrust# idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststoreidp.authn.LDAP.returnAttributes = uid,mail,eduPersonPrincipalNameidp.authn.LDAP.baseDN = ou=People,dc=example,dc=comidp.authn.LDAP.userFilter = (|(uid={user})(mail={user}))# idp.authn.LDAP.bindDN = uid=myservice,ou=system# idp.authn.LDAP.bindDNCredential = myServicePasswordidp.authn.LDAP.dnFormat = uid=%s,ou=People,dc=example,dc=com</pre> '''conf/saml-nameid.properties''' <pre>idp.nameid.saml2.default = urn:oasis:names:tc:SAML:2.0:nameid-format:transientidp.nameid.saml1.default = urn:mace:shibboleth:1.0:nameIdentifieridp.transientId.generator = shibboleth.CryptoTransientIdGeneratoridp.persistentId.sourceAttribute = eduPersonPrincipalNameidp.persistentId.useUnfilteredAttributes = trueidp.persistentId.salt = XXX_secret_salt_XXXidp.persistentId.generator = shibboleth.ComputedPersistentIdGenerator</pre> === Docker image készítése === Hozzunk létre egy <code>Dockerfile</code>-t ott, ahol a <code>customized-shibboleth-idp</code> mappa található, az alábbi tartalommal: <pre>FROM unicon/shibboleth-idpMAINTAINER John Doe <john.doe@example.com>ADD customized-shibboleth-idp/ /opt/shibboleth-idp/</pre> Készítsük el az image fájlt: <pre># docker build -t example-com/idp-shib .</pre> 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: <pre># docker run -it --rm \ -p 4443:4443 \ -p 8443: 8443 \ --network bridge \ -e JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \ -e JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=XXX_secret_XXX \ example-com/idp-shib</pre> === Hibakeresés === A <code>conf/idp.properties</code> fájlban megadható loglevel beállítások részletes hibakeresést tesznek lehetővé. {| class="wikitable"|-! Variable !! Default value !! Description|-|idp.loglevel.idp || INFO || Log level for the IdP proper|-|idp.loglevel.ldap || WARN || Log level for LDAP events|-|idp.loglevel.messages || INFO || Set to DEBUG for protocol message tracing|-|idp.loglevel.encryption || INFO || Set to DEBUG to log cleartext versions of encrypted content|-|idp.loglevel.opensaml || INFO || Log level for OpenSAML library classes|-|idp.loglevel.props || INFO || Set to DEBUG to log runtime properties during startup|-|idp.loglevel.spring || ERROR || Log level for Spring Framework (very chatty)|-|idp.loglevel.container || ERROR || Log level for Tomcat/Jetty (very chatty)|-|idp.loglevel.xmlsec || INFO || Set to DEBUG for low-level XML Signing/Encryption logging|} === További leírások === * [https://msdn.microsoft.com/en-us/library/azure/jj205463.aspx Configure Shibboleth for use with single sign-on]}}* [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]
[[Category: AAI]]
5
szerkesztés

Navigációs menü