Dokument je zatím stále v přípravě. V žádném případě toto nastavení neprovádějte na produkčním IdP!
Tento dokument popisuje zprovoznění dvoufaktorového ověřování na straně Shibboleth IdP a zavedení podpory pro profil REFEDS MFA. Jsou zde popsány konfigurační kroky na straně IdP a také je zde ukázka pro rozšíření LDAP schématu o atribut, do kterého je nutné uložit „seedu“ pro TOTP.
Vše, co je zde sepsáno, vychází z následujících oficiálních dokumentů:
Jako první krok je zapnutí modulu MFA v IdP:
cd /opt/shibboleth-idp ./bin/module.sh -e idp.authn.MFA
Nyní je potřeba provést úpravy v konfiguračním souboru pro autentizaci, tedy v conf/authn/authn.properties:
vim conf/authn/authn.properties
Nastavení toku (idp.authn.flows) na MFA a přidání podpory pro profil REFEDS MFA:
idp.authn.flows = MFA idp.authn.MFA.supportedPrincipals = \ saml2/https://refeds.org/profile/mfa, \ saml2/urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport, \ saml2/urn:oasis:names:tc:SAML:2.0:ac:classes:Password, \ saml1/urn:oasis:names:tc:SAML:1.0:am:password idp.authn.TOTP.supportedPrincipals = \ saml2/https://refeds.org/profile/mfa, \ saml2/urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken
Dále upravíme v konfiguračním souboru conf/authn/mfa-authn-config.xml MFA:
vim conf/authn/mfa-authn-config.xml
Níže uvedený kód způsobí, že uživatel je při autentizaci vyzván k zadání svého uživatelského jména a hesla. Pokud jsou zadané údaje správné a služba vyžaduje dvoufaktorové ověření, je uživateli předložena žádost o ověření druhého faktoru. Pokud služba doufaktorové ověření nepotřebuje, bude uživatel po zadání správného jména a hesla přesměrován na službu, aniž by musel řešit druhý faktor:
<util:map id="shibboleth.authn.MFA.TransitionMap"> <!-- First rule runs the Password login flow. --> <entry key=""> <bean parent="shibboleth.authn.MFA.Transition" p:nextFlow="authn/Password" /> </entry> <!-- Second rule runs a function if Password succeeds, to determine whether an additional factor is required. --> <entry key="authn/Password"> <bean parent="shibboleth.authn.MFA.Transition" p:nextFlowStrategy-ref="checkSecondFactor" /> </entry> </util:map> <!-- Example script to see if second factor is required. --> <bean id="checkSecondFactor" parent="shibboleth.ContextFunctions.Scripted" factory-method="inlineScript"> <constructor-arg> <value> <![CDATA[ nextFlow = "authn/TOTP"; // Check if second factor is necessary for request to be satisfied. authCtx = input.getSubcontext("net.shibboleth.idp.authn.context.AuthenticationContext"); mfaCtx = authCtx.getSubcontext("net.shibboleth.idp.authn.context.MultiFactorAuthenticationContext"); if (mfaCtx.isAcceptable()) { nextFlow = null; } nextFlow; // pass control to second factor or end with the first ]]> </value> </constructor-arg> </bean>
Druhý krok na IdP je zapnutí rozšíření TOTP, které je součástí projektu Shibboleth IdP.
cd /opt/shibboleth-idp ./bin/plugin.sh -I net.shibboleth.idp.plugin.authn.totp
Dále je potřeba definovat, ve kterém atributu je v LDAPu uložen tzv. „TOTP seed“, na jehož základě se počítá časově omezený jednorázový kód.
vim conf/attribute-resolver.xml
Atribut se může jmenovat libovolně, nicméně důrazně doporučujeme použít atribut nazvaný tokenSeeds
, protože to je výchozí hodnota definovaná v Shibbolethu. Pokud se atribut jmenuje jinak, je nutná dodatečná konfigurace IdP a to považujeme za zbytečné.
<AttributeDefinition xsi:type="Simple" id="tokenSeeds"> <InputDataConnector ref="myLDAP" attributeNames="tokenSeeds"/> </AttributeDefinition>
Restartováním Jetty zajistíme nahrání nové konfigurace IdP:
systemctl restart jetty9
V LDAP serveru musí být dostupný výše uvedený atribut tokenSeeds
, který obsahuje „seed“ pro TOTP.
Definice atributu tokenSeeds
v rámci schématu:
attributeTypes: ( tokenSeeds-oid NAME 'tokenSeeds' DESC 'TOTP Seed' SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE X-ORIGIN 'CESNET' )
Atribut tokenSeeds
definujeme ve schématu jako volitelný, proto je potřeba umístit ho do „MAY“:
objectClasses: ( tenOrgPerson-oid NAME 'tenOrgPerson' SUP top STRUCTURAL MAY ( aci $ tokenSeeds $ cesnetEmplID $ authorisedMail $ rfc822ForwardingMailbox $ memberOf ) X-ORIGIN 'cesnet.cz' )
Pro testování vícefaktorového ověřování na IdP je dostupná služba na serveru mfa.eduid.cz.
Dokumentace k vyžadování MFA na webu projektu Shibboleth.
CESNET, z. s. p. o.
Generála Píky 26
16000 Praha 6
info@cesnet.cz
Tel: +420 234 680 222
GSM: +420 602 252 531
support@cesnet.cz