If you need to customize how Okta users and groups are ingested into the Backstage catalog, you can implement your own entity provider by using the EntityProvider interface. You can choose between three main provider types:
OktaOrgEntityProvider: Loads both users and groups together.OktaUserEntityProvider: Loads only users.OktaGroupEntityProvider: Loads only groups.
Note: You must use either the default entity providers or your custom ones, not both simultaneously. To use a custom provider, you must register it as a Backstage module and add it to your backend using backend.add() while ensuring the default Okta provider is removed or commented out.
import { createBackendModule, coreServices } from '@backstage/backend-plugin-api';
import { oktaCatalogBackendEntityProviderFactoryExtensionPoint, EntityProviderFactory, OktaOrgEntityProvider } from '@roadiehq/catalog-backend-module-okta/new-backend';
import { Config } from '@backstage/config';
export const oktaOrgEntityProviderModule = createBackendModule({
pluginId: 'catalog',
moduleId: 'default-okta-org-entity-provider',
register(env) {
env.registerInit({
deps: {
provider: oktaCatalogBackendEntityProviderFactoryExtensionPoint,
logger: coreServices.logger,
},
async init({ provider, logger }) {
const factory: EntityProviderFactory = (oktaConfig: Config) =>
OktaOrgEntityProvider.fromConfig(oktaConfig, {
logger: logger,
userNamingStrategy: 'strip-domain-email',
groupNamingStrategy: 'kebab-case-name',
});
provider.setEntityProviderFactory(factory);
},
});
},
});
// In packages/backend/src/index.ts:
// backend.add(import('@roadiehq/catalog-backend-module-okta/default-provider-factory')); // Remove/Comment this
backend.add(oktaOrgEntityProviderModule);