From 116a740067993479d0cd89ed0b4dfae95e2e2d67 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 8 Apr 2022 13:59:59 +0200 Subject: [PATCH] auth-backend: migrate oidc provider to use resolver context Signed-off-by: Patrik Oldsberg --- .../src/providers/oidc/provider.test.ts | 14 +----- .../src/providers/oidc/provider.ts | 44 ++++--------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/plugins/auth-backend/src/providers/oidc/provider.test.ts b/plugins/auth-backend/src/providers/oidc/provider.test.ts index 13fe1ae46b..5312789a28 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.test.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.test.ts @@ -24,7 +24,7 @@ import { setupServer } from 'msw/node'; import { ClientMetadata, IssuerMetadata } from 'openid-client'; import { OAuthAdapter } from '../../lib/oauth'; import { createOidcProvider, OidcAuthProvider, Options } from './provider'; -import { getVoidLogger } from '@backstage/backend-common'; +import { AuthResolverContext } from '../types'; const issuerMetadata = { issuer: 'https://oidc.test', @@ -42,23 +42,13 @@ const issuerMetadata = { request_object_signing_alg_values_supported: ['RS256', 'RS512', 'HS256'], }; -const catalogIdentityClient = { - findUser: jest.fn(), -}; -const tokenIssuer = { - issueToken: jest.fn(), - listPublicKeys: jest.fn(), -}; - const clientMetadata: Options = { authHandler: async input => ({ profile: { displayName: input.userinfo.email, }, }), - catalogIdentityClient: catalogIdentityClient as unknown as any, - logger: getVoidLogger(), - tokenIssuer: tokenIssuer as unknown as any, + resolverContext: {} as AuthResolverContext, callbackUrl: 'https://oidc.test/callback', clientId: 'testclientid', clientSecret: 'testclientsecret', diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts index 82f6df8faf..53729ce7cc 100644 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ b/plugins/auth-backend/src/providers/oidc/provider.ts @@ -40,12 +40,10 @@ import { import { AuthHandler, AuthProviderFactory, + AuthResolverContext, RedirectInfo, SignInResolver, } from '../types'; -import { CatalogIdentityClient } from '../../lib/catalog'; -import { TokenIssuer } from '../../identity'; -import { Logger } from 'winston'; type PrivateInfo = { refreshToken?: string; @@ -72,9 +70,7 @@ export type Options = OAuthProviderOptions & { tokenSignedResponseAlg?: string; signInResolver?: SignInResolver; authHandler: AuthHandler; - tokenIssuer: TokenIssuer; - catalogIdentityClient: CatalogIdentityClient; - logger: Logger; + resolverContext: AuthResolverContext; }; export class OidcAuthProvider implements OAuthHandlers { @@ -84,9 +80,7 @@ export class OidcAuthProvider implements OAuthHandlers { private readonly signInResolver?: SignInResolver; private readonly authHandler: AuthHandler; - private readonly tokenIssuer: TokenIssuer; - private readonly catalogIdentityClient: CatalogIdentityClient; - private readonly logger: Logger; + private readonly resolverContext: AuthResolverContext; constructor(options: Options) { this.implementation = this.setupStrategy(options); @@ -94,9 +88,7 @@ export class OidcAuthProvider implements OAuthHandlers { this.prompt = options.prompt; this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; - this.tokenIssuer = options.tokenIssuer; - this.catalogIdentityClient = options.catalogIdentityClient; - this.logger = options.logger; + this.resolverContext = options.resolverContext; } async start(req: OAuthStartRequest): Promise { @@ -182,12 +174,7 @@ export class OidcAuthProvider implements OAuthHandlers { // Use this function to grab the user profile info from the token // Then populate the profile with it private async handleResult(result: OidcAuthResult): Promise { - const context = { - logger: this.logger, - catalogIdentityClient: this.catalogIdentityClient, - tokenIssuer: this.tokenIssuer, - }; - const { profile } = await this.authHandler(result, context); + const { profile } = await this.authHandler(result, this.resolverContext); const response: OAuthResponse = { providerInfo: { idToken: result.tokenset.id_token, @@ -203,7 +190,7 @@ export class OidcAuthProvider implements OAuthHandlers { result, profile, }, - context, + this.resolverContext, ); } @@ -229,15 +216,7 @@ export const createOidcProvider = (options?: { resolver: SignInResolver; }; }): AuthProviderFactory => { - return ({ - providerId, - globalConfig, - config, - tokenIssuer, - tokenManager, - catalogApi, - logger, - }) => + return ({ providerId, globalConfig, config, resolverContext }) => OAuthEnvironmentHandler.mapConfig(config, envConfig => { const clientId = envConfig.getString('clientId'); const clientSecret = envConfig.getString('clientSecret'); @@ -251,10 +230,6 @@ export const createOidcProvider = (options?: { ); const scope = envConfig.getOptionalString('scope'); const prompt = envConfig.getOptionalString('prompt'); - const catalogIdentityClient = new CatalogIdentityClient({ - catalogApi, - tokenManager, - }); const authHandler: AuthHandler = options?.authHandler ? options.authHandler @@ -276,15 +251,12 @@ export const createOidcProvider = (options?: { prompt, signInResolver: options?.signIn?.resolver, authHandler, - logger, - tokenIssuer, - catalogIdentityClient, + resolverContext, }); return OAuthAdapter.fromConfig(globalConfig, provider, { disableRefresh: false, providerId, - tokenIssuer, callbackUrl, }); });