Make authstorage configurable

This commit is contained in:
Willem Dantuma 2020-01-22 11:33:33 +01:00
parent e8845a092a
commit 3f27662e3f
5 changed files with 51 additions and 8 deletions

View File

@ -91,7 +91,7 @@ export class AppCommonServiceModule {
{
provide: APP_INITIALIZER,
useFactory: appConfigFactory,
deps: [Injector, AppConfig, OAuthService,AuthConfigFactory],
deps: [Injector, AppConfig, OAuthService,AuthConfigFactory,OAuthStorage],
multi: true
},
{

View File

@ -41,6 +41,7 @@ import {IUser} from './models/user';
import * as commonActions from './actions/app-common.actions';
import * as commonReducers from './reducers/app-common.reducer';
import * as commonEffects from './effects/app-common.effects';
import { SecureOAuthStorage} from './shared/secureOAuthStorage';
export {
SafePipe,
@ -67,7 +68,8 @@ export {
commonReducers,
IAuthconfigFactory,
AuthConfigFactory,
MenuBackgroundComponent
MenuBackgroundComponent,
SecureOAuthStorage
};
@NgModule({

View File

@ -1,12 +1,13 @@
import { Injector } from '@angular/core';
import { Location} from '@angular/common';
import { Router,UrlSerializer } from '@angular/router';
import { AuthConfig, OAuthService, JwksValidationHandler, OAuthErrorEvent } from 'angular-oauth2-oidc';
import { AuthConfig, OAuthService, JwksValidationHandler, OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';
import { AppConfig } from "./app.config";
import { IAuthconfigFactory } from './authconfigFactory';
export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthService: OAuthService, authconfigFactory:IAuthconfigFactory): () => Promise<any> {
export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthService: OAuthService, authconfigFactory:IAuthconfigFactory,authStorage:OAuthStorage): () => Promise<any> {
return (): Promise<any> => {
return appConfig.load().then(() => {
oauthService.events.subscribe((event) => {
@ -22,7 +23,7 @@ export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthS
}
});
oauthService.configure(authconfigFactory.getAuthConfig(appConfig));
oauthService.setStorage(localStorage);
oauthService.setStorage(authStorage);
oauthService.tokenValidationHandler = new JwksValidationHandler();
oauthService.tokenValidationHandler.validateAtHash = function () {
return new Promise<boolean>((res) => { res(true); })

View File

@ -0,0 +1,36 @@
import {OAuthStorage} from 'angular-oauth2-oidc';
import {Inject, Injectable} from '@angular/core';
@Injectable()
export class SecureOAuthStorage extends OAuthStorage {
private storage = {};
secureKey(key:string): boolean {
if(key == "nonce") return false;
if(key == "PKCI_verifier") return false;
return true;
}
getItem(key: string): string {
if(this.secureKey(key)) {
return this.storage[key];
} else {
return window.sessionStorage.getItem(key);
}
};
removeItem(key: string): void {
if(this.secureKey(key)) {
delete this.storage[key];
} else {
window.sessionStorage.removeItem(key);
}
}
setItem(key: string, data: string): void {
if(this.secureKey(key)) {
this.storage[key]=data;
} else {
window.sessionStorage.setItem(key,data);
}
}
}

View File

@ -18,8 +18,8 @@ import { StoreRouterConnectingModule} from '@ngrx/router-store';
import {AppRoutingModule} from './app-routing.module';
import { LogoComponent } from './logo/logo.component';
import { MenuComponent } from './menu/menu.component';
import { LocalAuthconfigFactory} from './localAuthconfigFactory';
import { AuthConfig } from 'angular-oauth2-oidc';
import { SecureOAuthStorage} from '@farmmaps/common';
import { OAuthStorage } from 'angular-oauth2-oidc';
export const BOOTSTRAP_EFFECTS = new InjectionToken('Bootstrap Effects');
@ -62,7 +62,11 @@ export function provideBootstrapEffects(effects: Type<any>[]) {
EffectsModule.forRoot([])
],
providers: [
AuthConfigFactory
AuthConfigFactory,
{
provide:OAuthStorage,
useClass:SecureOAuthStorage
}
// {
// provide:AuthConfigFactory,
// useClass:LocalAuthconfigFactory