auth-backend: issue user id tokens when signing in with google or github

This commit is contained in:
Patrik Oldsberg
2020-06-20 12:06:17 +02:00
parent f2746a6eec
commit 5bd70f9aa5
4 changed files with 20 additions and 0 deletions
@@ -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 () => {
@@ -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}`);
@@ -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);
@@ -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);