Fediz IDP
Note: This document describes the Fediz IdP in the 1.0 release. For more recent releases please go here instead.
The Fediz Identity Provider (IDP) consists of two WAR files. One is the Security Token Service (STS) component, fediz-idp-sts.war, which is responsible for validating credentials, getting the requested claims data and issuing a SAML token. There is no easy way for Web browsers to issue SOAP requests to the STS directly, necessitating the second component, an IDP WAR (fediz-idp.war) which allows browser-based applications to interact with the STS. The communication between the browser and the IDP must be performed within the confines of the base HTTP 1.1 functionality and conform as closely as possible to the WS-Trust protocols semantic.
The Fediz STS is based on a customized CXF STS configured to support standard Federation use cases demonstrated by the examples.
Installation
The Fediz IDP has been tested with Tomcat 6 and 7 but should be able to work with any commercial JEE application server.
It's recommended to set up a dedicated (separate) Tomcat instance for the IDP compared to the one hosting the RP (relying party) applications. Using one deployment of Tomcat with multiple CATALINA_BASE instances, as described here is one option but note any libs in $CATALINA_HOME/lib folder will be shared throughout each of the activated CATALINA_BASE instances. Another probably simpler alternative is to copy your Tomcat folder into a second location and edit its conf/server.xml file and change port values (discussed below) so they don't conflict with the original Tomcat installation.
...
If you're using the one Tomcat with multiple instance option, it's $CATALINA_BASE instead that will need to be redefined above.
Tomcat server.xml configuration
The Fediz examples use the following Tomcat port values for the IDP/STS, defined in the conf/server.xml file. We use ports different from the Tomcat defaults so as not to conflict with the Tomcat instance running the RP applications.
...
Once you deploy the IDP WAR files to your Tomcat installation (<catalina.home>/webapps), you should be able to see the Fediz STS from a browser at http://localhost:9080/fediz-idp-sts/STSService?wsdl (note that prior to 1.0.3 the war name is actually "fedizidpsts"), assuming you're using port 9080 as listed above.
Configuration
You can manage the users, their claims and the claims per application in the IDP.
User and password
The users and passwords are configured in a Spring configuration file in webapps/fediz-idp-sts/WEB-INF/passwords.xml
. The following users are already configured and can easily be extended.
Code Block | ||||
---|---|---|---|---|
| ||||
<util:map id="passwords"> <entry key="alice" value="ecila" /> <entry key="bob" value="bob" /> <entry key="ted" value="det" /> </util:map> |
User Claims
The claims of each user are configured in a spring configuration file webapps/fediz-idp-sts/WEB-INF/userClaims.xml
. The following claims are already configured:
...
The claim id's are configured according to Section 7.5 in the specification Identity Metasystem Interoperability. The mapping of claims to a SAML attribute statement are described in Section 7.2.
Application claims
The required claims per relying party are configured in the webapps/fediz-idp/WEB-INF/RPClaims.xml
. The XML file has the following structure:
...
The JIRA issue FEDIZ-1 will provide another option to manage the required claims on the Relying Party side.
Configure LDAP directory
The Fediz IDP can be configured to attach an LDAP directory to authenticate users and to retrieve claims information of users.
Username and password authentication
WSS4J supports username/password authentication using JAAS. The JDK provides a JAAS LoginModule for LDAP which can be configured as illustrated here in a sample jaas configuration (jaas.config):
...
The property contextName
must match the context name defined in the JAAS configuration file which is myldap
in this example.
Claims management
When a STS client (IDP) requests a claim, the ClaimsManager in the STS checks every registered ClaimsHandler who can provide the data of the requested claim. The CXF STS provides org.apache.cxf.sts.claims.LdapClaimsHandler
which is a claims handler implementation to get claims from user attributes in a LDAP directory.
...