FusionAuth developer image
FusionAuth developer logo
  • Back to site
  • Expert Advice
  • Blog
  • Developers
  • Downloads
  • Account
  • Contact sales
Navigate to...
  • Welcome
  • Getting Started
    • Getting Started
    • 5-minute Setup Guide
      • Overview
      • Docker
      • Fast Path
      • Sandbox
    • Setup Wizard & First Login
    • Register a User and Login
    • Self-service Registration
    • Start and Stop FusionAuth
    • Core Concepts
      • Overview
      • Users
      • Roles
      • Groups
      • Registrations
      • Applications
      • Tenants
      • Identity Providers
      • Authentication/Authorization
      • Integration Points
    • Example Apps
      • Overview
      • Dart
      • Go
      • Java
      • JavaScript
      • .NET Core
      • PHP
      • Python
      • Ruby
    • Tutorials
      • Overview
      • Java Spring
      • Python Django
  • Installation Guide
    • Overview
    • System Requirements
    • Server Layout
    • Cloud
    • Cluster
    • Docker
    • Fast Path
    • Kubernetes
      • Overview
      • Deployment Guide
      • Minikube Setup
      • Amazon EKS Setup
      • Google GKE Setup
      • Microsoft AKS Setup
    • Kickstart™
    • Homebrew
    • Marketplaces
    • Packages
    • Database
    • FusionAuth App
    • FusionAuth Search
    • Common Configuration
  • Migration Guide
    • Overview
    • General
    • Auth0
    • Keycloak
    • Amazon Cognito
    • Firebase
    • Microsoft Azure AD B2C
    • Tutorial
  • Admin Guide
    • Overview
    • Account Portal
    • Config Management
    • Editions and Features
    • Key Rotation
    • Licensing
    • Monitoring
    • Prometheus Setup
    • Proxy Setup
    • Reference
      • Overview
      • Configuration
      • CORS
      • Data Types
      • Hosted Login Pages Cookies
      • Known Limitations
      • Password Hashes
    • Releases
    • Roadmap
    • Search And FusionAuth
    • Securing
    • Switch Search Engines
    • Technical Support
    • Troubleshooting
    • Upgrading
    • WebAuthn
  • Login Methods
    • Identity Providers
      • Overview
      • Apple
      • Epic Games
      • External JWT
        • Overview
        • Example
      • Facebook
      • Google
      • HYPR
      • LinkedIn
      • Nintendo
      • OpenID Connect
        • Overview
        • Amazon Cognito
        • Azure AD
        • Discord
        • Github
        • Okta
      • Sony PlayStation Network
      • Steam
      • Twitch
      • Twitter
      • SAML v2
        • Overview
        • ADFS
        • Azure AD
        • Okta
      • SAML v2 IdP Initiated
        • Overview
        • Okta
      • Xbox
    • OIDC & OAuth 2.0
      • Overview
      • Endpoints
      • Tokens
      • OAuth Modes
      • URL Validation
    • Passwordless
      • Overview
      • Magic Links
      • WebAuthn & Passkeys
    • SAML v2 IdP
      • Overview
      • Google
      • PagerDuty
      • Tableau Cloud
      • Zendesk
  • Developer Guide
    • Overview
    • API Gateways
      • Overview
      • Amazon API Gateway
      • Kong Gateway
      • ngrok Cloud Edge
    • Client Libraries & SDKs
      • Overview
      • Dart
      • Go
      • Java
      • JavaScript
      • .NET Core
      • Node
      • OpenAPI
      • PHP
      • Python
      • React
      • Ruby
      • Typescript
    • Events & Webhooks
      • Overview
      • Writing a Webhook
      • Securing Webhooks
      • Events
        • Overview
        • Audit Log Create
        • Event Log Create
        • JWT Public Key Update
        • JWT Refresh
        • JWT Refresh Token Revoke
        • Kickstart Success
        • Group Create
        • Group Create Complete
        • Group Delete
        • Group Delete Complete
        • Group Update
        • Group Update Complete
        • Group Member Add
        • Group Member Add Complete
        • Group Member Remove
        • Group Member Remove Complete
        • Group Member Update
        • Group Member Update Complete
        • User Action
        • User Bulk Create
        • User Create
        • User Create Complete
        • User Deactivate
        • User Delete
        • User Delete Complete
        • User Email Update
        • User Email Verified
        • User IdP Link
        • User IdP Unlink
        • User Login Failed
        • User Login Id Dup. Create
        • User Login Id Dup. Update
        • User Login New Device
        • User Login Success
        • User Login Suspicious
        • User Password Breach
        • User Password Reset Send
        • User Password Reset Start
        • User Password Reset Success
        • User Password Update
        • User Reactivate
        • User Reg. Create
        • User Reg. Create Complete
        • User Reg. Delete
        • User Reg. Delete Complete
        • User Registration Update
        • User Reg. Update Complete
        • User Reg. Verified
        • User 2FA Method Add
        • User 2FA Method Remove
        • User Update
        • User Update Complete
    • Guides
      • Overview
      • Application Specific Email Templates
      • Authentication Tokens
      • Exposing A Local Instance
      • JSON Web Tokens
      • Key Master
      • Localization and Internationalization
      • Multi-Factor Authentication
      • Multi-Tenant
      • Passwordless
      • Registration-based Email Verification
      • Searching With Elasticsearch
      • Securing Your APIs
      • Silent Mode
      • Single Sign-on
      • Two Factor (pre 1.26)
    • Integrations
      • Overview
      • CleanSpeak
      • Kafka
      • Twilio
    • Plugins
      • Overview
      • Writing a Plugin
      • Custom Password Hashing
    • User Control & Gating
      • Overview
      • Gate Unverified Users
      • Gate Unverified Registrations
      • User Account Lockout
  • Customization
    • Email & Templates
      • Overview
      • Configure Email
      • Email Templates
      • Email Variables
      • Message Templates
    • Lambdas
      • Overview
      • Apple Reconcile
      • Client Cred. JWT Populate
      • Epic Games Reconcile
      • External JWT Reconcile
      • Facebook Reconcile
      • Google Reconcile
      • HYPR Reconcile
      • JWT Populate
      • LDAP Connector Reconcile
      • LinkedIn Reconcile
      • Nintendo Reconcile
      • OpenID Connect Reconcile
      • SAML v2 Populate
      • SAML v2 Reconcile
      • SCIM Group Req. Converter
      • SCIM Group Resp. Convtr.
      • SCIM User Req. Converter
      • SCIM User Resp. Converter
      • Self-Service Registration
      • Sony PSN Reconcile
      • Steam Reconcile
      • Twitch Reconcile
      • Twitter Reconcile
      • Xbox Reconcile
    • Messengers
      • Overview
      • Generic Messenger
      • Twilio Messenger
    • Themes
      • Overview
      • Examples
      • Helpers
      • Localization
      • Template Variables
      • Kickstart Custom Theme
  • Premium Features
    • Overview
    • Advanced Registration Forms
    • Advanced Threat Detection
    • Application Specific Themes
    • Breached Password Detection
    • Connectors
      • Overview
      • Generic Connector
      • LDAP Connector
      • FusionAuth Connector
    • Entity Management
    • SCIM
      • Overview
      • Azure AD Client
      • Okta Client
      • SCIM-SDK
    • Self Service Account Mgmt
      • Overview
      • Updating User Data & Password
      • Add Two-Factor Authenticator
      • Add Two-Factor Email
      • Add Two-Factor SMS
      • Add WebAuthn Passkey
      • Customizing
      • Troubleshooting
    • WebAuthn
  • APIs
    • Overview
    • Authentication
    • Errors
    • API Explorer
    • Actioning Users
    • API Keys
    • Applications
    • Audit Logs
    • Connectors
      • Overview
      • Generic
      • LDAP
    • Consents
    • Emails
    • Entity Management
      • Overview
      • Entities
      • Entity Types
      • Grants
    • Event Logs
    • Families
    • Forms
    • Form Fields
    • Groups
    • Identity Providers
      • Overview
      • Links
      • Apple
      • External JWT
      • Epic Games
      • Facebook
      • Google
      • HYPR
      • LinkedIn
      • Nintendo
      • OpenID Connect
      • SAML v2
      • SAML v2 IdP Initiated
      • Sony PlayStation Network
      • Steam
      • Twitch
      • Twitter
      • Xbox
    • Integrations
    • IP Access Control Lists
    • JWT
    • Keys
    • Lambdas
    • Login
    • Message Templates
    • Messengers
      • Overview
      • Generic
      • Twilio
    • Multi-Factor/Two Factor
    • Passwordless
    • Reactor
    • Registrations
    • Reports
    • SCIM
      • Overview
      • SCIM User
      • SCIM Group
      • SCIM EnterpriseUser
      • SCIM Service Provider Config.
    • System
    • Tenants
    • Themes
    • Users
    • User Actions
    • User Action Reasons
    • User Comments
    • WebAuthn
    • Webhooks
  • Release Notes

    FusionAuth Identity Providers

    Overview

    Identity Providers allow you to enable third-party login in FusionAuth.

    • Identity Providers and Tenants

    • Identity Providers and Applications

    • Overrides

    • Hints

    • Linking Strategies

    • Linking and Create Registration

    • Linking Strategy Examples

      • Link On Email

      • Link On Username

      • Pending Link

      • Anonymous Link

    The following providers are available:

    • Apple

    • Facebook

    • Epic Games - requires an Essentials or Enterprise plan.

    • External JWT

    • Google

    • HYPR

    • LinkedIn

    • Nintendo - requires an Essentials or Enterprise plan.

    • OpenID Connect

    • SAML v2

    • SAML v2 IdP Initiated - requires an Essentials or Enterprise plan.

    • Sony - requires an Essentials or Enterprise plan.

    • Steam - requires an Essentials or Enterprise plan.

    • Twitch - requires an Essentials or Enterprise plan.

    • Twitter

    • Xbox - requires an Essentials or Enterprise plan.


    If you’re looking for a provider that is not listed here, review the open features in GitHub and either vote or comment on an existing feature, or open a new feature request if you do not find an existing feature open.

    Find the FusionAuth Identity Providers in the UI by navigating to Settings → Identity Providers or use the Identity Providers APIs.

    Identity Providers

    Identity Providers and Tenants

    Identity providers can be configured to set a limit on the number of links that may be established on a per tenant basis.

    In the following, we have enabled "Limit links per user" on the Default tenant and set a "Maximum link count" of 2. With this configuration, a user will be only be able to establish at most two links for this IdP specifically.

    Identity Providers

    Identity Providers and Applications

    Identity providers can be enabled or disabled on a per application basis.

    In the following screenshot you will see that we have enabled this login provider for the Pied Piper application and enabled "Create registration". Enabling "Create registration" means that a user does not need to be manually registered for the application prior to using this login provider.

    Identity Providers

    For example, when a new user attempts to log into Pied Piper using Google, if their user does not exist in FusionAuth it will be created dynamically, and if the Create registration toggle has been enabled, the user will also be registered for Pied Piper and assigned any default roles assigned by the application.

    If you do not wish to automatically provision a user for this Application when logging in with Google, leave Create registration off and you will need to manually register a user for this application before they may complete login with Google and be authorized for the Pied Piper Application.

    Regardless of whether you enable "Create registration" or not, a user may be created within FusionAuth when a person signs in with the identity provider. What happens depends on the configured linking strategy. This setting controls whether a user is registered and therefore authorized for this application.

    When you enable an identity provider you’re indicating that this external provider is an additional SoR (Source of Record). When the user successfully logs into this provider such as Google, Google has told FusionAuth the user exists and their credentials are valid. In return FusionAuth accepts this source of record and creates link and/or user, depending on the linking strategy. Next we identify if the configuration allows us to automatically register (that is, provide authorization) for the requested application, based on the "Create registration" setting.

    Overrides

    For each application, you can provide different identity provider configurations. You might do this if you had two different applications that were both using Apple as an identity provider, but with different Apple configuration settings. You can override none, some or all of the configuration values by expanding the "Overrides" link for the given application assignment or modifying the identityProvider.applicationConfiguration values using the API.

    Overriding Identity Provider settings

    However, you cannot have two different Identity Providers for the same application. Use two different applications instead.

    Additionally, override settings are not available in the External JWT, SAMLv2, or OpenID Connect Identity Providers. You can create multiple instances of these providers; that is the correct way to have multiple configurations for these providers

    Hints

    When you are using the FusionAuth hosted login pages, you can bypass the login page and go directly to a third party Identity Provider based upon the user’s email address or an Identity Provider Id.

    Hints currently work with most Identity Providers with the exception of HYPR and the SAML v2 Identity Provider Initiated type Identity Provider.

    An Identity Provider Id is appended to the Login URL for an application using the idp_hint request parameter. For example, to send a user directly to a login page for an OIDC identity provider with the id 44449786-3dff-42a6-aac6-1f1ceecb6c46, you’d append &idp_hint=44449786-3dff-42a6-aac6-1f1ceecb6c46.

    An email address or domain may be provided in the login_hint request parameter. For example, to send a user directly to the login page of an OIDC IdP configured with a domain of example.com, you’d append &login_hint=example.com to the application’s Login URL. The use of this parameter is up to the Identity Provider, so adding this parameter may or may not be supported by the Identity Provider you are using.

    You can read more about the login_hint and idp_hint parameters in the OAuth Endpoints documentation.

    Linking Strategies

    Linking Strategies

    The linking strategy is used when creating the link between the Identity Provider and the user account in FusionAuth.

    Here’s a table illustrating the alternatives. Note that Disabled was added in version 1.37.0.

    Strategy User must exist User linked on Use when the identity provider…​

    Create a Pending Link

    Depends on application, see note below

    User chooses account manually

    …​shares a different email or username than an existing FusionAuth identity and users know enough to link them.

    Disabled

    –

    –

    When you want to manage linking explicitly using the Link API.

    Anonymously Link

    No

    IdP id

    …​exposes neither username nor email.

    Link On Email. Create the user if they do not exist.

    No

    Email address

    …​shares the user’s email and users that do not exist in the identity provider can have access.

    Link On Email. Do not create the user if they do not exist.

    Yes

    Email address

    …​shares the user’s email and you don’t want users that do not exist in FusionAuth to have access. Such users must be provisioned beforehand.

    Link On Username. Create the user if they do not exist.

    No

    Username

    …​shares the user’s username and users that do not exist in the identity provider can have access.

    Link On Username. Do not create the user if they do not exist.

    Yes

    Username

    …​shares the user’s username and you don’t want users that do not exist in FusionAuth to have access. Such users must be provisioned beforehand.

    Some identity providers don’t provide a username and/or email. In those instances, it is recommended to consider using a pending link or creating an anonymous link. Both of these options enable you to link the user without an email or username in the response from the identity provider.

    Linking and Create Registration

    The Linking strategy and Create registration configurations are related to each other, but distinct. The Linking strategy controls how a User is created in FusionAuth based on information returned from the remote identity provider. Create registration controls if the User created in FusionAuth is registered for a given Application.

    Linking Strategy Examples

    Here are some walkthroughs of linking scenarios. A user, Richard, is trying to access an app, such as Pied Piper. Richard uses an Identity Provider to login. It doesn’t matter if the Identity Provider is a social provider like Facebook or an enterprise provider like an OIDC or SAML compatible identity server, the behavior is the same.

    The FusionAuth hosted login pages are being used. Similar behavior is available via the Identity Provider API.

    Disabled

    Available since 1.37.0.

    This is useful when you do not want to link automatically, and you wish to control all linking manually via the Link API. This provides you the greatest level of control of which users become linked from the identity provider to FusionAuth.

    Pending Link

    This is useful when the user has a different email or username in the remote identity provider than an existing FusionAuth identity. The user must know enough to link them. That is, they must remember the account they have in FusionAuth. This uses the linking strategy Create a Pending Link.

    If the application configuration allows for self service registration, the user can register for an account in FusionAuth when a pending link strategy is chosen. Otherwise the user must exist in FusionAuth.

    Richard is logging into Pied Piper. He has an account in FusionAuth with the email address richard@piedpiper.com. He also has an account at Hooli with the email address richard@hooli.com.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with richard@hooli.com, his account at Hooli.

    • He is redirected to FusionAuth.

    • He is prompted to log in to FusionAuth with his Pied Piper email and password.

    • He logs in with richard@piedpiper.com.

    • The FusionAuth account with the email richard@piedpiper.com is linked to the Hooli richard@hooli.com account.

    Screen prompting a user to connect their pending link account.

    Anonymous Link

    This is a useful option if you don’t want to create a full user account in FusionAuth. But see the Anonymous Account Limitations below. This uses the linking strategy Anonymous Link.

    Anonymous Link, IdP Provides Email

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with richard@hooli.com, his account at Hooli.

    • He is redirected to FusionAuth.

    • There is an account created in FusionAuth with no username or email address. It is not a full account.

    • Richard can interact with Pied Piper (a JWT is issued, etc), but cannot use FusionAuth workflows like 'forgot password'.

    Admin view of a user who has linked anonymously.

    Anonymous Link, No Email Or Username Returned By The IdP

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth. The identity provider is the Hooli XYZ server. This identity provider does not return a username or password in its response.

    • Richard clicks on the 'Login With Hooli XYZ' button on the login screen.

    • He logs in with richard@hoolixyz.com.

    • He is redirected to FusionAuth.

    • There is an account created in FusionAuth with no username or email address. It is not a full account.

    • Richard can interact with Pied Piper (a JWT is issued, etc), but cannot use FusionAuth workflows like 'forgot password'.

    Anonymous Account Limitations

    Users with an anonymous account may log in to applications using their IdP provided credentials.

    They won’t have an email address, so can’t use any of the email based FusionAuth workflows like 'forgot password'.

    You also can’t modify the user using any FusionAuth APIs. If you try to modify the user using these, you must provide a username or email.

    Link On Email

    There are two strategies which link on an email address.

    • Link On Email. Create the user if they do not exist. creates a user if no matching account exists in FusionAuth.

    • Link On Email. Do not create the user if they do not exist. does not create a user if no matching account exists and treats such a login as an error. If a matching account exists, the login succeeds.

    Link On Email, Matching Account Must Exist and Does

    This uses the linking strategy Link On Email. Do not create the user if they do not exist..

    Here, Richard is logging into Pied Piper. He has an account in FusionAuth with the email address richard@piedpiper.com.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard@piedpiper.com account.

    • He is redirected to FusionAuth and logs in successfully. Access is allowed.

    • The FusionAuth account with the email richard@piedpiper.com is linked to the Hooli richard@piedpiper.com account.

    Link On Email, Matching Account Must Exist But Doesn’t

    This uses the linking strategy Link On Email. Do not create the user if they do not exist..

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard@piedpiper.com account.

    • He is redirected to FusionAuth but sees an error. No access is allowed.

    Here’s an example of the error page:

    Error when a user must exist for successful linking.

    Link On Email, User Account Is Created If Needed

    This uses the linking strategy Link On Email. Create the user if they do not exist..

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard@piedpiper.com account.

    • He is redirected to FusionAuth.

    • A new account is created in FusionAuth with the email richard@piedpiper.com.

    • The new FusionAuth account with the email richard@piedpiper.com is linked to the Hooli richard@piedpiper.com account.

    Link On Username

    Similarly to linking on email, there are two options here.

    • Link On Username. Create the user if they do not exist. creates a user if no matching account exists in FusionAuth.

    • Link On Username. Do not create the user if they do not exist. does not create a user if no matching account exists and treats such a login as an error. If a matching account exists, the login succeeds.

    Link On Username, Matching Account Must Exist And Does

    This uses the linking strategy Link On Username. Do not create the user if they do not exist..

    Richard is logging into Pied Piper. He has an account in FusionAuth with the username richard.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard account.

    • He is redirected to FusionAuth and logs in successfully. Access is allowed.

    • The FusionAuth account with the username richard is linked to the Hooli richard account.

    Link On Username, Matching Account Must Exist But Doesn’t

    This uses the linking strategy Link On Username. Do not create the user if they do not exist..

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard account.

    • He is redirected to FusionAuth but sees an error. No access is allowed.

    Link On Username, User Account Is Created If Needed

    This uses the linking strategy Link On Username. Create the user if they do not exist..

    Richard is logging into Pied Piper. He doesn’t have an account in FusionAuth.

    • Richard clicks on the 'Login With Hooli' button on the login screen.

    • He logs in to Hooli with the richard account.

    • He is redirected to FusionAuth.

    • A new account is created in FusionAuth with the username richard.

    • The new FusionAuth account with the username richard is linked to the Hooli richard account.

    Feedback

    How helpful was this page?

    See a problem?

    File an issue in our docs repo

    Have a question or comment to share?

    Visit the FusionAuth community forum.

    © 2023 FusionAuth
    How-to
    Subscribe for developer updates