From 5bd70f9aa5626133e4dcec0cace3bb4c5e09ce1d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 20 Jun 2020 12:06:17 +0200 Subject: [PATCH] auth-backend: issue user id tokens when signing in with google or github --- plugins/auth-backend/src/lib/OAuthProvider.test.ts | 3 +++ plugins/auth-backend/src/lib/OAuthProvider.ts | 11 +++++++++++ plugins/auth-backend/src/providers/github/provider.ts | 3 +++ plugins/auth-backend/src/providers/google/provider.ts | 3 +++ 4 files changed, 20 insertions(+) diff --git a/plugins/auth-backend/src/lib/OAuthProvider.test.ts b/plugins/auth-backend/src/lib/OAuthProvider.test.ts index bb261d1380..80c69fdffd 100644 --- a/plugins/auth-backend/src/lib/OAuthProvider.test.ts +++ b/plugins/auth-backend/src/lib/OAuthProvider.test.ts @@ -180,6 +180,9 @@ describe('OAuthProvider', () => { disableRefresh: true, baseUrl: 'http://localhost:7000/auth', appOrigin: 'http://localhost:3000', + tokenIssuer: { + issueToken: async () => 'my-id-token', + }, }; it('sets the correct headers in start', async () => { diff --git a/plugins/auth-backend/src/lib/OAuthProvider.ts b/plugins/auth-backend/src/lib/OAuthProvider.ts index 62b565b60d..d8d11d52a3 100644 --- a/plugins/auth-backend/src/lib/OAuthProvider.ts +++ b/plugins/auth-backend/src/lib/OAuthProvider.ts @@ -23,6 +23,7 @@ import { OAuthProviderHandlers, } from '../providers/types'; import { InputError } from '@backstage/backend-common'; +import { TokenIssuer } from '../identity'; export const THOUSAND_DAYS_MS = 1000 * 24 * 60 * 60 * 1000; export const TEN_MINUTES_MS = 600 * 1000; @@ -33,6 +34,7 @@ export type Options = { disableRefresh?: boolean; baseUrl: string; appOrigin: string; + tokenIssuer: TokenIssuer; }; export const verifyNonce = (req: express.Request, providerId: string) => { @@ -142,6 +144,10 @@ export class OAuthProvider implements AuthProviderRouteHandlers { this.setRefreshTokenCookie(res, refreshToken); } + user.userIdToken = await this.options.tokenIssuer.issueToken({ + sub: user.profile.email, + }); + // post message back to popup if successful return postMessageResponse(res, this.options.appOrigin, { type: 'auth-result', @@ -198,6 +204,11 @@ export class OAuthProvider implements AuthProviderRouteHandlers { refreshToken, scope, ); + + refreshInfo.userIdToken = await this.options.tokenIssuer.issueToken({ + sub: refreshInfo.profile?.email, + }); + return res.send(refreshInfo); } catch (error) { return res.status(401).send(`${error.message}`); diff --git a/plugins/auth-backend/src/providers/github/provider.ts b/plugins/auth-backend/src/providers/github/provider.ts index 0bcd80cf2c..b5f9d7e46b 100644 --- a/plugins/auth-backend/src/providers/github/provider.ts +++ b/plugins/auth-backend/src/providers/github/provider.ts @@ -36,6 +36,7 @@ import { EnvironmentHandler, } from '../../lib/EnvironmentHandler'; import { Logger } from 'winston'; +import { TokenIssuer } from '../../identity'; export class GithubAuthProvider implements OAuthProviderHandlers { private readonly _strategy: GithubStrategy; @@ -69,6 +70,7 @@ export function createGithubProvider( { baseUrl }: AuthProviderConfig, providerConfig: EnvironmentProviderConfig, logger: Logger, + tokenIssuer: TokenIssuer, ) { const envProviders: EnvironmentHandlers = {}; @@ -101,6 +103,7 @@ export function createGithubProvider( secure, baseUrl, appOrigin, + tokenIssuer, }); } return new EnvironmentHandler(envProviders); diff --git a/plugins/auth-backend/src/providers/google/provider.ts b/plugins/auth-backend/src/providers/google/provider.ts index 9675d4eef2..f41fbfe787 100644 --- a/plugins/auth-backend/src/providers/google/provider.ts +++ b/plugins/auth-backend/src/providers/google/provider.ts @@ -41,6 +41,7 @@ import { EnvironmentHandlers, } from '../../lib/EnvironmentHandler'; import { Logger } from 'winston'; +import { TokenIssuer } from '../../identity'; export class GoogleAuthProvider implements OAuthProviderHandlers { private readonly _strategy: GoogleStrategy; @@ -116,6 +117,7 @@ export function createGoogleProvider( { baseUrl }: AuthProviderConfig, providerConfig: EnvironmentProviderConfig, logger: Logger, + tokenIssuer: TokenIssuer, ) { const envProviders: EnvironmentHandlers = {}; @@ -148,6 +150,7 @@ export function createGoogleProvider( secure, baseUrl, appOrigin, + tokenIssuer, }); } return new EnvironmentHandler(envProviders);