# Shibboleth Identity Provider

Steps not yet verified in the identity provider's current admin console.

Recommended protocol: SAML 2.0.

## SAML 2.0

### Shibboleth Identity Provider'ı SAML 2.0 ile bağlayın

1. KeenAuth SP metadata'sını **SP metadata URL** adresinden indirin ve IdP sunucusuna kaydedin; örneğin %{idp.home}/metadata/local-metadata.xml.
2. conf/metadata-providers.xml dosyasına xsi:type="FilesystemMetadataProvider" olan ve metadataFile'ı bu dosyayı gösteren bir MetadataProvider ekleyin. IdP dosyayı düzenli aralıklarla yeniden yükler (minRefreshDelay varsayılanı PT30S, maxRefreshDelay varsayılanı PT4H); hemen yüklemek için IdP'yi yeniden başlatın.
3. Alternatif olarak metadata'yı xsi:type="FileBackedHTTPMetadataProvider" ile HTTP üzerinden yükleyin (backingFile ve metadataURL **SP metadata URL**). İlkenizin gerektirdiği metadata filtrelerini ekleyin; örneğin SignatureValidation, RequiredValidUntil ve RetainedRole md:SPSSODescriptor olan EntityRole.
4. KeenAuth varlığı **SP entity ID** artık doğrulanmış bir relying party'dir ve conf/relying-party.xml içindeki shibboleth.DefaultRelyingParty (SAML2.SSO ve öteki olağan profiller) ona uygulanır. Varsayılan olarak her girişte değişen transient bir NameID üretir; KeenAuth'un persistent NameID'ye ihtiyacı vardır (sonraki iki adım).
5. Persistent NameID'yi açın: conf/saml-nameid.properties içinde idp.persistentId.sourceAttribute'u kararlı ve yeniden atanmayan bir özniteliğe ayarlayın, credentials/secrets.properties içinde idp.persistentId.salt'ı uzun rastgele bir sır yapın ve conf/saml-nameid.xml içinde shibboleth.SAML2NameIDGenerators listesindeki \<ref bean="shibboleth.SAML2PersistentGenerator" /\> satırını yorumdan çıkarın.
6. shibboleth.RelyingPartyOverrides listesine bir override bean ekleyin: \<bean parent="RelyingPartyByName" c:relyingPartyIds="**SP entity ID**"\>; profileConfigurations listesinde \<bean parent="SAML2.SSO" p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" /\> ve \<ref bean="SAML2.Logout" /\> olsun. IdP, KeenAuth metadata'sındaki NameIDFormat listesini unspecified içerdiği için yok sayar; override varsayılan profilleri de miras almaz, bu yüzden KeenAuth'un kullandığı her profili listeleyin.
7. Öznitelikleri yayımlayın: conf/attribute-resolver.xml içinde kullanıcı deponuzdan mail, givenName ve sn'yi (isteğe bağlı olarak grupları) tanımlayın; conf/attribute-filter.xml içine PolicyRequirementRule'u xsi:type="Requester" value="**SP entity ID**" olan ve her biri için AttributeRule permitAny="true" içeren bir AttributeFilterPolicy ekleyin. Öznitelikler urn:oid:0.9.2342.19200300.100.1.3 (mail), urn:oid:2.5.4.42 (givenName) ve urn:oid:2.5.4.4 (sn) adlarıyla gider; KeenAuth'ta bu adları e-posta, ad ve soyada eşleyin.
8. KeenAuth'ta IdP entityID değerini (conf/idp.properties içindeki idp.entityID; tüm SAML profillerinde issuer) ve IdP'nin `https://<idp host>/idp/shibboleth` adresinde yayımladığı SAML metadata'sını (%{idp.home}/metadata/idp-metadata.xml ile aynı dosya) girin, ardından bağlantı testini çalıştırın.

Values in bold are shown on the connection's page in the Admin Portal, where this guide has them filled in.
