SAML 2.0 SSO with Salesforce.com CRM
By rajeev on Jul 02, 2009
SAML 2 support is available since Winter 09 Release. OpenSSO console team is in the process of building a cool task flow for this, which will significantly reduce the number of steps listed here. Look out for it in Build 12.
- For each OpenSSO user that needs to access Saleforce.com, choose a user profile attribute to map to a Saleforce.com user. We will call this the "federationID". Note that this value should be unique for each user. As an example we will use the OpenSSO email profile attribute (mail). Also note that for obvious security reasons the identified profile attribute must be changeable by authorized administrators only, ie it should not be changeable by the user. Please refer to OpenSSO Delegated Admin feature to set up appropriate privileges.
- Decide the exact SAML attribute name the IDP will populate the "federationID" with.
- Setup up OpenSSO IDP with xml signing turned on. Note the provider id of the IDP configuration. In my setup it is :
- Export the OpenSSO (IDP) public key to a file
For example, if your OpenSSO IDP uses the out-of-the-box
testcertificate, execute the following in a terminal on the box hosting the OpenSSO server:
$ cd <openssoconfig_dir>
$ keytool -export -keystore keystore.jks -alias test -file cert.cer
<openssoconfig_dir>is the base bootstrap directory you specified during OpenSSO installation.
- Login to
http://www.saleforce.comas admin user.
- Navigate to
Setup->Security Controls->SingleSignOn Settings. Enable SAML and fill up the dialog presented.
- Select version 2.0
- Import the IDP certificate - in my setup I entered
cert.cerfile saved in Prerequisites steps above.
- Enter fields that tell Salesforce.com how the authenticated user is identified in the SAML assertion from the IDP. In my example I specified
Save this url string - it will be needed while configuring OpenSSO service provider.
- Navigate to
Setup->Manage Users->UsersFor each user enter the FederationID value corresponding to the OpenSSO profile attribute chosen. In my setup chose a user setup its FederationID to "firstname.lastname@example.org" :
Configuring OpenSSO end
- If not already created, login to OpenSSO console and create a Hosted Identity Provider either via the Task flow or other means. Make sure you choose the "Sign Assertion" option and specify a certificate to use for signing. OpenSSO comes with a default "test" certificate.
- Provision the "federationID" value for each user that needs access to Salesforce.com. As an example - login to OpenSSO console as amadmin, navigate to
RootRealm->Subjects->demoand setup the demo user's Email attribute as
- Create a new Service provider representing Saleforce.com
- Login to OpenSSO console as amadmin
- Download enclosed salesforceSPMetadata.xml
- >Start "Create hosted SP" task flow
- Import salesforceSPMetadata.xml metadata
(Optionally : specify the URL from this blog :
directly in the task flow field)
- Navigate to Saleforce.com service provider created in the last step, select Services tab and enter the salesforce.com URL obtained earlier in the "Salesforce.com end" steps.
- Setup saml attribute to be sent as part of the Assertion to identify Salesforce.com user. This is done by configuring the attribute mapper either on IDP configuration or SP configuration. If IDP attribute mapper is configured, all SPs will receive the attribute and if only Salesforce.com SP configuration is setup - that attribute will only be sent to Salesforce.com. In my setup I changed
SP attribute mappper to map OpenSSO user profile attribute
- Start browser and invoke IDP initiated SSO :
In my setup I used:
If things work correcly, OpenSSO in IDP role should prompt for user credentials and seamlessly Single SignON to Salesforce.com as the user mapped to the authenticated user.
- Troubleshooting : Both OpenSSO and Salesforce.com provide excellent online facilities to test SSO.
- Visit OpenSSO
Test Connection Connectivitytask flow.
- Salesforce.com provides a SAML assertion
Validatorwhere you can cut and paste a SAML assertion to report errors.
- Both OpenSSO and Salesforce.com provide error logs - SFDC user logs are under
Setup->Manage Users->Login History.
- Visit OpenSSO