Auth state working

This commit is contained in:
Raghunandan
2020-06-02 17:10:46 +02:00
parent c177c050c4
commit 578760956f
11 changed files with 334 additions and 27 deletions
+3 -1
View File
@@ -34,7 +34,9 @@
"passport-google-oauth20": "^2.0.0",
"passport-saml": "^1.3.3",
"winston": "^3.2.1",
"yn": "^4.0.0"
"yn": "^4.0.0",
"jwt-decode": "2.2.0",
"@types/jwt-decode": "2.2.1"
},
"devDependencies": {
"@backstage/cli": "^0.1.1-alpha.6",
@@ -199,6 +199,7 @@ export class OAuthProvider implements AuthProviderRouteHandlers {
}
async logout(req: express.Request, res: express.Response): Promise<any> {
//TODO(soapraj): Logout doesnt work yet
if (!ensuresXRequestedWith(req)) {
return res.status(401).send('Invalid X-Requested-With header');
}
@@ -233,6 +234,7 @@ export class OAuthProvider implements AuthProviderRouteHandlers {
// get new access_token
const refreshInfo = await this.providerHandlers.refresh(
this.provider,
refreshToken,
scope,
);
@@ -15,6 +15,7 @@
*/
import express from 'express';
import jwtDecoder from 'jwt-decode';
import { Strategy as GoogleStrategy } from 'passport-google-oauth20';
import {
executeFrameHandlerStrategy,
@@ -27,6 +28,7 @@ import {
AuthInfoPrivate,
RedirectInfo,
AuthProviderConfig,
AuthInfoWithProfile,
} from '../types';
import { OAuthProvider } from '../OAuthProvider';
@@ -73,18 +75,37 @@ export class GoogleAuthProvider implements OAuthProviderHandlers {
return await executeFrameHandlerStrategy(req, this._strategy);
}
async refresh(refreshToken: string, scope: string): Promise<AuthInfoBase> {
async refresh(
provider: string,
refreshToken: string,
scope: string,
): Promise<AuthInfoWithProfile> {
const { accessToken, params } = await executeRefreshTokenStrategy(
this._strategy,
refreshToken,
scope,
);
// TODO(soapraj): check what happens when you return undefined
let profile;
try {
const { email, name, picture } = jwtDecoder(params.id_token);
profile = {
provider,
email,
name,
picture,
};
} catch (e) {
console.error('Failed to parse id token and get profile info');
}
return {
accessToken,
idToken: params.id_token,
expiresInSeconds: params.expires_in,
scope: params.scope,
profile,
};
}
}
+9 -2
View File
@@ -26,7 +26,7 @@ export type AuthProviderConfig = {
export interface OAuthProviderHandlers {
start(req: express.Request, options: any): Promise<any>;
handler(req: express.Request): Promise<any>;
refresh?(refreshToken: string, scope: string): Promise<any>;
refresh?(provider: string, refreshToken: string, scope: string): Promise<any>;
logout?(): Promise<any>;
}
@@ -49,7 +49,14 @@ export type AuthInfoBase = {
};
export type AuthInfoWithProfile = AuthInfoBase & {
profile: passport.Profile;
profile:
| {
provider: string;
email: string;
name?: string;
picture?: string;
}
| undefined;
};
export type AuthInfoPrivate = {