IDP Configuration
Download and extract the shibboleth-identity-provider-3.3.2 file in following dir
[tanu@cloudera:[ET] /cs/app/shibboleth-idp]$ ls -lrt /cs/app/shibboleth-idp
total 292
drwxr-x--- 2 tanu tanu 4096 Nov 16 10:26 old-20171116-1025
drwxr-x--- 6 tanu tanu 4096 Nov 16 10:26 dist
drwxr-x--- 2 tanu tanu 4096 Nov 16 10:26 doc
drwxr-x--- 6 tanu tanu 4096 Nov 16 10:26 system
drwxr-x--- 7 tanu tanu 4096 Nov 16 10:26 webapp
drwxr-x--- 2 tanu tanu 4096 Nov 16 10:26 credentials
drwxr-x--- 5 tanu tanu 4096 Nov 16 10:26 edit-webapp
drwxr-x--- 4 tanu tanu 4096 Nov 16 10:26 flows
drwxr-x--- 2 tanu tanu 4096 Nov 16 10:26 messages
drwxr-x--- 4 tanu tanu 4096 Nov 16 10:26 views
drwxr-x--- 2 tanu tanu 4096 Nov 16 10:26 war
-rw-r----- 1 tanu tanu 235520 Nov 16 11:29 conf.org.tar
drwxr-x--- 3 tanu tanu 4096 Nov 16 14:12 bin
drwxr-x--- 2 tanu tanu 4096 Nov 17 12:09 metadata
drwxr-x--- 2 tanu tanu 4096 Nov 17 12:48 logs
drwxr-x--- 6 tanu tanu 4096 Nov 17 13:04 conf
############################################################################
Update the access-control.xml file to allow users to connect to IDP servers
p:allowedRanges="#{ {'127.0.0.1/32', '::1/128','179.30.0.0/25','179.0.0.0/25'} }" />
Edit the /cs/app/shibboleth-idp/conf/ldap.properties file and update the following maked lines.
And Make sure there are no space at the end of each line otherwise services wont start properly
Ex idp.authn.LDAP.useStartTLS = false
########################################################
idp.authn.LDAP.authenticator = adAuthenticator
idp.authn.LDAP.ldapURL = ldaps://ad.tanu.com
idp.authn.LDAP.useStartTLS = false
idp.authn.LDAP.useSSL = true
idp.authn.LDAP.sslConfig = certificateTrust
idp.authn.LDAP.trustCertificates = /var/tmp/ca_cert.pem
idp.authn.LDAP.returnAttributes = sAMAccountName,mail,company
idp.authn.LDAP.baseDN = DC=users,DC=tanu,DC=net
idp.authn.LDAP.subtreeSearch = true
idp.authn.LDAP.userFilter = (sAMAccountName={0})
idp.authn.LDAP.bindDN = adbinduser@TANU
idp.authn.LDAP.bindDNCredential = test123
idp.authn.LDAP.dnFormat = %s@TANU
idp.attribute.resolver.LDAP.ldapURL = %{idp.authn.LDAP.ldapURL}
idp.attribute.resolver.LDAP.connectTimeout = %{idp.authn.LDAP.connectTimeout:PT3S}
idp.attribute.resolver.LDAP.responseTimeout = %{idp.authn.LDAP.responseTimeout:PT3S}
idp.attribute.resolver.LDAP.baseDN = %{idp.authn.LDAP.baseDN:undefined}
idp.attribute.resolver.LDAP.bindDN = %{idp.authn.LDAP.bindDN:undefined}
idp.attribute.resolver.LDAP.bindDNCredential = %{idp.authn.LDAP.bindDNCredential:undefined}
idp.attribute.resolver.LDAP.useStartTLS = %{idp.authn.LDAP.useStartTLS:true}
idp.attribute.resolver.LDAP.trustCertificates = %{idp.authn.LDAP.trustCertificates:undefined}
idp.attribute.resolver.LDAP.searchFilter = (sAMAccountName=$resolutionContext.principal)
##############################################################
Move the attribute-resolver.xml attribute-resolver.xml_bkf
cp attribute-resolver-ldap.xml attribute-resolver.xml
<AttributeDefinition id="sAMAccountName" xsi:type="Simple" sourceAttributeID="sAMAccountName">
<Dependency ref="myLDAP" />
<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="sAMAccountName" encodeType="false" />
</AttributeDefinition>
<!--
In the rest of the world, the email address is the standard identifier,
despite the problems with that practice. Consider making the EPPN value
the same as your official email addresses whenever possible.
-->
<AttributeDefinition id="mail" xsi:type="Simple" sourceAttributeID="mail">
<Dependency ref="myLDAP" />
<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 id="ou" xsi:type="Simple" sourceAttributeID="role">
<Dependency ref="myLDAP" />
<AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:ou" encodeType="false" />
<AttributeEncoder xsi:type="SAML2String" name="urn:oid:2.5.4.11" friendlyName="role" encodeType="false" />
</AttributeDefinition>
<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="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>
############################################################################
Edit the attribute-filter.xml
<AttributeFilterPolicy id="anyone">
<PolicyRequirementRule xsi:type="ANY" />
<AttributeRule attributeID="sAMAccountName">
<PermitValueRule xsi:type="ANY" />
</AttributeRule>
<AttributeRule attributeID="mail">
<PermitValueRule xsi:type="ANY" />
</AttributeRule>
<AttributeRule attributeID="role">
<PermitValueRule xsi:type="ANY" />
</AttributeRule>
</AttributeFilterPolicy>
Update the metadata-providers.xml with cloudera manager SP metadata URL
<MetadataProvider id="clouderaManager"
xsi:type="FileBackedHTTPMetadataProvider"
backingFile="%{idp.home}/metadata/clouderalocalCopyFromXYZHTTP.xml"
metadataURL="http://cm.tanu.com:7180/saml/metadata">
<!-- <MetadataFilter xsi:type="RequiredValidUntil" maxValidityInterval="P14D"/> -->
<MetadataFilter xsi:type="EntityRoleWhiteList">
<RetainedRole>md:SPSSODescriptor</RetainedRole>
</MetadataFilter>
</MetadataProvider>
Cloudera SP Configuration
1) Create SP keystore file
keytool -genkeypair -keystore cm-sp.keystore -keyalg RSA -alias node1 -dname "CN=cm.tanu.com,O=Hadoop" -storepass changeme -keypass changeme -validity 365
2) /cs/app/shibboleth-idp/metadata/idp-metadata.xml file into cloudera manager custom path
3) Go to Cloudera Manager -> Administration --> Setting --> External Authentication -> select SAML
Then restart the Manager, it should redirect to IDP server for authentication.





