org.keycloak.federation.sssd

## Class SSSDFederationProvider

- java.lang.Object
- - org.keycloak.federation.sssd.SSSDFederationProvider

- All Implemented Interfaces:
    CredentialInputUpdater, CredentialInputUpdater.Streams, CredentialInputValidator, Provider, ImportedUserValidation, UserLookupProvider, UserStorageProvider

      public class SSSDFederationProvider
      extends Object
      implements UserStorageProvider, UserLookupProvider, CredentialInputUpdater.Streams, CredentialInputValidator, ImportedUserValidation

  SPI provider implementation to retrieve data from SSSD and authenticate against PAM
  Version:
    $Revision: 1 $
  Author:
    Bruno Oliveira

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.keycloak.storage.UserStorageProvider

      `UserStorageProvider.EditMode`

    - ### Nested classes/interfaces inherited from interface org.keycloak.credential.CredentialInputUpdater

      `CredentialInputUpdater.Streams`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected UserStorageProviderModel` | `model`
    `protected KeycloakSession` | `session`
    `protected static Set<String>` | `supportedCredentialTypes`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SSSDFederationProvider(KeycloakSession session, UserStorageProviderModel model, SSSDFederationProviderFactory sssdFederationProviderFactory)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `void` | `disableCredentialType(RealmModel realm, UserModel user, String credentialType)`
    `protected UserModel` | `findOrCreateAuthenticatedUser(RealmModel realm, String username)` Called after successful authentication
    `Stream<String>` | `getDisableableCredentialTypesStream(RealmModel realm, UserModel user)` Obtains the set of credential types that can be disabled via `disableCredentialType`.
    `UserModel` | `getUserByEmail(String email, RealmModel realm)`
    `UserModel` | `getUserById(String id, RealmModel realm)`
    `UserModel` | `getUserByUsername(String username, RealmModel realm)`
    `protected UserModel` | `importUserToKeycloak(RealmModel realm, String username)`
    `boolean` | `isConfiguredFor(RealmModel realm, UserModel user, String credentialType)`
    `boolean` | `isValid(RealmModel realm, UserModel local)`
    `boolean` | `isValid(RealmModel realm, UserModel user, CredentialInput input)` Tests whether a credential is valid
    `void` | `preRemove(RealmModel realm)` Callback when a realm is removed.
    `void` | `preRemove(RealmModel realm, GroupModel group)` Callback when a group is removed.
    `void` | `preRemove(RealmModel realm, RoleModel role)` Callback when a role is removed.
    `boolean` | `supportsCredentialType(String credentialType)`
    `boolean` | `updateCredential(RealmModel realm, UserModel user, CredentialInput input)`
    `UserModel` | `validate(RealmModel realm, UserModel user)` If this method returns null, then the user in local storage will be removed
    `UserModel` | `validateAndProxy(RealmModel realm, UserModel local)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.keycloak.credential.CredentialInputUpdater.Streams

      `getDisableableCredentialTypes`

- - ### Field Detail

    - #### supportedCredentialTypes

          protected static final Set<String> supportedCredentialTypes

    - #### session

          protected KeycloakSession session

    - #### model

          protected UserStorageProviderModel model

  - ### Constructor Detail

    - #### SSSDFederationProvider

          public SSSDFederationProvider(KeycloakSession session,
                                        UserStorageProviderModel model,
                                        SSSDFederationProviderFactory sssdFederationProviderFactory)

  - ### Method Detail

    - #### getUserByUsername

          public UserModel getUserByUsername(String username,
                                             RealmModel realm)

      Specified by:
        `getUserByUsername` in interface `UserLookupProvider`

    - #### validate

          public UserModel validate(RealmModel realm,
                                    UserModel user)

      Description copied from interface: `ImportedUserValidation`
      If this method returns null, then the user in local storage will be removed
      Specified by:
        `validate` in interface `ImportedUserValidation`
      Returns:
        null if user no longer valid

    - #### findOrCreateAuthenticatedUser

          protected UserModel findOrCreateAuthenticatedUser(RealmModel realm,
                                                            String username)

      Called after successful authentication
      Parameters:
        `realm` - realm
        `username` - username without realm prefix
      Returns:
        user if found or successfully created. Null if user with same username already exists, but is not linked to this provider

    - #### importUserToKeycloak

          protected UserModel importUserToKeycloak(RealmModel realm,
                                                   String username)

    - #### getUserById

          public UserModel getUserById(String id,
                                       RealmModel realm)

      Specified by:
        `getUserById` in interface `UserLookupProvider`

    - #### getUserByEmail

          public UserModel getUserByEmail(String email,
                                          RealmModel realm)

      Specified by:
        `getUserByEmail` in interface `UserLookupProvider`
      Returns:

    - #### preRemove

          public void preRemove(RealmModel realm)

      Description copied from interface: `UserStorageProvider`
      Callback when a realm is removed. Implement this if, for example, you want to do some cleanup in your user storage when a realm is removed
      Specified by:
        `preRemove` in interface `UserStorageProvider`

    - #### preRemove

          public void preRemove(RealmModel realm,
                                RoleModel role)

      Description copied from interface: `UserStorageProvider`
      Callback when a role is removed. Allows you to do things like remove a user role mapping in your external store if appropriate
      Specified by:
        `preRemove` in interface `UserStorageProvider`

    - #### preRemove

          public void preRemove(RealmModel realm,
                                GroupModel group)

      Description copied from interface: `UserStorageProvider`
      Callback when a group is removed. Allows you to do things like remove a user group mapping in your external store if appropriate
      Specified by:
        `preRemove` in interface `UserStorageProvider`

    - #### isValid

          public boolean isValid(RealmModel realm,
                                 UserModel local)

    - #### supportsCredentialType

          public boolean supportsCredentialType(String credentialType)

      Specified by:
        `supportsCredentialType` in interface `CredentialInputUpdater`
      Specified by:
        `supportsCredentialType` in interface `CredentialInputValidator`

    - #### isConfiguredFor

          public boolean isConfiguredFor(RealmModel realm,
                                         UserModel user,
                                         String credentialType)

      Specified by:
        `isConfiguredFor` in interface `CredentialInputValidator`

    - #### isValid

          public boolean isValid(RealmModel realm,
                                 UserModel user,
                                 CredentialInput input)

      Description copied from interface: `CredentialInputValidator`
      Tests whether a credential is valid
      Specified by:
        `isValid` in interface `CredentialInputValidator`
      Parameters:
        `realm` - The realm in which to which the credential belongs to
        `user` - The user for which to test the credential
        `input` - the credential details to verify
      Returns:
        true if the passed secret is correct

    - #### validateAndProxy

          public UserModel validateAndProxy(RealmModel realm,
                                            UserModel local)

    - #### close

          public void close()

      Specified by:
        `close` in interface `Provider`

    - #### updateCredential

          public boolean updateCredential(RealmModel realm,
                                          UserModel user,
                                          CredentialInput input)

      Specified by:
        `updateCredential` in interface `CredentialInputUpdater`

    - #### disableCredentialType

          public void disableCredentialType(RealmModel realm,
                                            UserModel user,
                                            String credentialType)

      Specified by:
        `disableCredentialType` in interface `CredentialInputUpdater`

    - #### getDisableableCredentialTypesStream

          public Stream<String> getDisableableCredentialTypesStream(RealmModel realm,
                                                                    UserModel user)

      Description copied from interface: `CredentialInputUpdater`
      Obtains the set of credential types that can be disabled via `disableCredentialType`.
      Specified by:
        `getDisableableCredentialTypesStream` in interface `CredentialInputUpdater`
      Specified by:
        `getDisableableCredentialTypesStream` in interface `CredentialInputUpdater.Streams`
      Parameters:
        `realm` - a reference to the realm.
        `user` - the user whose credentials are being searched.
      Returns:
        a non-null `Stream` of credential types.

Copyright © 2021 JBoss by Red Hat. All rights reserved.