Keycloak SAML Implementation

Category: Login with SSO
On this page:

    This article contains Keycloak-specific help for configuring Login with SSO via SAML 2.0. For help configuring Login with SSO for another IdP, refer to SAML 2.0 Configuration.

    Configuration involves working simultaneously with the Bitwarden Web Vault and the Keycloak Portal. As you proceed, we recommend having both readily available and completing steps in the order they’re documented.

    Tip

    Already an SSO expert? Skip the instructions in this article and download screenshots of sample configurations to compare against your own.

    Download Sample

    Open SSO in the Web Vault

    If you’re coming straight from SAML 2.0 Configuration, you should already have an Organization ID created. If you don’t refer to that article to create an Organization ID for SSO.

    Navigate to your Organization’s ManageSingle Sign-On screen:

    SAML 2.0 Configuration
    SAML 2.0 Configuration

    You don’t need to edit anything on this screen yet, but keep it open for easy reference.

    Create a Client

    In the Keycloak portal, create a new Client:

    Create a Client
    Create a Client

    On the Add Client screen, configure the following settings:

    Field Description
    Client ID Set this field to the pre-generated SP Entity ID retrieved from the Bitwarden SSO Configuration screen.

    For Cloud-hosted customers, this is always https://sso.bitwarden.com/saml2. For self-hosted instances, this is determined by your configured server URL, for example https://your.domain.com/sso/saml2.
    Client Protocol Select saml.
    Client SAML Endpoint Enter your master SAML processing URL, for example https://<keycloak_domain>/auth/realms/master/protocol/saml.

    When you’re finished, select the Save button.

    Settings

    On the Settings tab, configure the following options:

    Field Description
    Name Give the client a unique, Bitwarden-specific name.
    Enabled Toggle to On.
    Sign Documents Specify whether SAML documents should be signed by the Keycloak realm.
    Sign Assertions Specify whether SAML assertions should be signed by the Keycloak realm.
    Signature Algorithm If Sign Assertions is enabled, select what algorithm to sign with (sha-256 by default).
    Name ID Format Select the Name ID Format for Keycloak to use in SAML responses.
    Valid Redirect URLs Set this field to the pre-generated Assertion Consumer Service (ACS) URL retreived from the Bitwarden SSO configuration screen.

    For Cloud-hosted customers, this is always https://sso.bitwarden.com/saml2/your-org-id/Acs. For self-hosted instances, this is determined by your configured server URL, for example https://your.domain/sso/your-org-id/Acs.
    Base URL Set this field to the login URL from which users will access Bitwarden.

    For Cloud-hosted customers, this is always https://vault.bitwarden.com/#/sso. For self-hosted instances, this is determined by you configured server URL, for example https://your-domain.com/#/sso.
    Master SAML Processing URL If not automatically filled in, set this field to your master SAML processing URL, for example https://<keycloak_domain>/auth/realms/master/protocol/saml.

    Fine Grain SAML Endpoint Configuration

    In the Fine Grain SAML Endpoint Configuration section, configure either the Assertion Consumer Service POST Binding URL or Assertion Consumer Service Redirect Binding URL. You will choose in a later step whether to use HTTP POST or Redirect, so configure whichever you’d like to use:

    Configure SAML Endpoint
    Configure SAML Endpoint

    For either field, set it to the pre-generated Assertion Consumer Service (ACS) URL retreived from the Bitwarden SSO configuration screen. For Cloud-hosted customers, this is always https://sso.bitwarden.com/saml2/your-org-id/Acs. For self-hosted instances, this is determined by your configured server URL, for example https://your.domain/sso/your-org-id/Acs.

    Mappers

    Select the Mappers tab and create all of the following Mappers:

    X500 givenName

    X500 surname

    X500 email

    groups

    role list

    Download your Certificate

    From the navigation, select Realm SettingsKeys and get your certificate:

    Get Keycloak Certificate
    Get Keycloak Certificate

    Copy the certificate for use in a later step.

    Back to the Web Vault

    At this point, you’ve configured everything you need within the context of the Keycloak Portal. Jump back over to the Bitwarden Web Vault to complete configuration.

    The Single Sign-On screen separates configuration into two sections:

    • SAML Service Provider Configuration will determine the format of SAML requests.
    • SAML Identity Provider Configuration will determine the format to expect for SAML responses.

    Service Provider Configuration

    Configure the following fields:

    Field Description
    Name ID Format Select the Name ID Format you chose when configuring the Keycloak client.
    Outbound Signing Algorithm The algorithm Bitwarden will use to sign SAML requests.
    Signing Behavior Whether/when SAML requests will be signed.
    Minimum Incoming Signing Algorithm Select the algorithm the Keycloak client is configured to use to sign SAML documents or assertions.
    Want Assertions Signed Whether Bitwarden expects SAML assertions to be signed. If toggled on, make sure you configure the Keycloak client to sign assertions.
    Validate Certificates Check this box when using trusted and valid certificates from your IdP through a trusted CA. Self-signed certificates may fail unless proper trust chains are configured with the Bitwarden Login with SSO docker image.

    When you’re done with the Service Provider Configuration section, Save your work.

    Identity Provider Configuration

    Identity Provider Configuration will often require you to refer back to the Keycloak Portal to retrieve client values:

    Field Description
    Entity ID Enter the URL of the Keycloak realm on which the client was created, for example https://<keycloak_domain>/auth/realms/master.
    Binding Type Select HTTP POST or Redirect.
    Single Sign On Service URL Enter your master SAML processing URL, for example https://<keycloak_domain>/auth/realms/master/protocol/saml.
    Single Log Out Service URL Login with SSO currently does not support SLO. This option is planned for future development, however you may preconfigure it with your Logout URL if you wish.
    Artifact Resolution Service URL Leave this field blank, Keycloak SAML supports only HTTP POST and Redirect.
    X509 Public Certificate Paste the downloaded certificate, removing -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----.

    Extra spaces, carriage returns, and other extraneous characters will cause certificate validation to fail.
    Outbound Signing Algorithm Select the algorithm the Keycloak client is configured to use to sign SAML documents or assertions.
    Allow Unsolicited Authentication Response Login with SSO currently does not support unsolicited (IdP-initiated) SAML assertions. This option is planned for future development.
    Disable Outbound Logout Requests Login with SSO currently does not support SLO. This option is planned for future development.
    Want Authentication Requests Signed Whether Keycloak expects SAML requests to be signed.

    When you’re done with the Identity Provider Configuration section, Save your work.

    Test the Configuration

    Once your configuration is complete, test it by navigating to https://vault.bitwarden.com and selecting the Enterprise Single Sign-On button:

    Enterprise Single Sign-On button
    Enterprise Single Sign-On button

    Enter the configured Organization Identifier and select Log In. If your implementation is successfully configured, you’ll be redirected to the Keycloak login screen:

    Keycloak Login Screen
    Keycloak Login Screen

    After you authenticate with your Keycloak credentials, enter your Bitwarden Master Password to decrypt your Vault!