Shibboleth
This guide will walk you through configuring pfSense to use (Shibboleth IdP)[https://www.shibboleth.net] for webConfigurator authentication via SAML 2.0. This allows your users to log into pfSense using Shibboleth, centralizing access and features such as MFA where used.
Prerequisites
- A pfSense instance with the SAML2 package installed
- Access to the Shibboleth IdP and it's configuration files and folders in the IdP base installation directory usually
/opt/shibboleth-idporc:\opt\shibboleth-idpconf/relying-party.xmlconf/attribute-filter.xmlconf/saml-nameid.xmlconf/metadata-providers.xmlmetadata/
- Access to be able to restart the IdPs web container or use Reloadable services
- If you are unfamiliar with XML then please use an XML linter or even a web browser to check you have valid XML.
Step 1: XML metadata file
Create an XML metadata file e.g. metadata/pfsense-metadata.xml
Replace pfsense.example.org with the IP or FQDN of your IdP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Step 2: Update Metadata Providers
Configure the IdP to read the metadata, add the following to metadata-providers.xml, note the id must be unique
1 | |
Step 3: Update Relying Party
Configure relying-party.xml, this is to override the defualt configurations for Shibboleth.
These would be encryptAssertions and use of the transient NameID, it appears that the pfSense SAML2 package doesn't support encrypted assertions out of the box, and relies on the identifier/attribute for the user being in the NameID. Other NameID formats could be used?
1 2 3 4 5 6 7 8 | |
Step 4 - Update SAML NameID
Configure saml-nameid.xml, this goes hand-in-hand with the above, it maps a source attribute to the NameID format you've chosen to use, and conditions this for only this relying party, this should not affect other services using the IdP.
1 2 3 4 5 6 7 8 | |
Step 5 - Update Attribute Filter
You'll need an appropriate AttributeFilterPolicy in attribute-filter.xml to release your chosen attribute, that's also mentioned above. The Requester is the EntityID of the SP.
1 2 3 4 5 6 7 8 | |
Step 6 - Update Attribute Resolver
This step is optional, it depends if uid or any other attribute you might use is configured in the resolver. This is the part that will really depend on your configuration and DataConnectors in the Shibboleth IdP. You could use "Filter Email Usernames" for any attribute that uses a username@scope format e.g. eduPersonPrincipalName, subject-id or mail (!). You could also likely use attributes like sAMAccountName, if you have that instead of my uid example.
This an example AttributeDefinition
1 2 3 | |
Step 7 - Reload/Restart
Use (Reloadable Services)[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199507931/ReloadableServices] to restart the IdPs services, given the number of files changed, then there are a few;
1 2 3 4 5 | |
Alternatively, restart the web container e.g. Jetty/tomcat.
You should monitor idp-process.log following e.g. tail -f idp-process.log
Step 8: Test the configuration
On the pfSense login page, there should now be a Sign In with SSO link below the standard login form. Click this link to be redirected to Okta for authentication. Assuming everything is configured correctly, you should be redirected back to pfSense and be logged in. If you encounter issues, you can enable the Debug option on the System > SAML2 page to enable more detailed logging. The SAML2 logs can be found under Status > System Logs > Packages > SAML2.
Future areas to document and test..
-
Groups are not covered in the above, but that would just be another attribute released with an Attribute Filter and Resolver configuration. I've assumed that access has been created based on my matching an existing user to
uid -
SAML encryption testing, that would required 'Custom SAML2 configuration' in the plugin
-
Testing with a SAML attribute not just NameID.
Last updated: 2026-07-11