Index: src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -1,7 +1,12 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
+import { AuthCallbackComponent } from './auth-callback/auth-callback.component';
 import { AuthorizedGuard } from './core/guards/authorized.guard';
 
 const routes: Routes = [
+  {
+    path: 'auth-callback',
+    component: AuthCallbackComponent
+  },
   {
     path: 'questioning',
Index: src/Clients/Angular/finki-chattery/src/app/app.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app.component.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/app.component.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -1,4 +1,4 @@
 import { Component, OnInit } from '@angular/core';
-import { LoaderService, RedirectService } from './core/services';
+import { LoaderService } from './core/services';
 
 @Component({
@@ -8,8 +8,6 @@
 })
 export class AppComponent implements OnInit {
-  constructor(public loader: LoaderService, private redirect: RedirectService) {}
+  constructor(public loader: LoaderService) {}
 
-  ngOnInit(): void {
-    this.redirect.redirectLoggedInUser();
-  }
+  ngOnInit(): void {}
 }
Index: src/Clients/Angular/finki-chattery/src/app/app.module.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/app.module.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/app.module.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -10,7 +10,8 @@
 import { CoreModule } from './core/core.module';
 import { translateConfiguration, TranslateFromJsonService } from './shared-app/services';
+import { AuthCallbackComponent } from './auth-callback/auth-callback.component';
 
 @NgModule({
-  declarations: [AppComponent],
+  declarations: [AppComponent, AuthCallbackComponent],
   imports: [
     BrowserModule,
Index: src/Clients/Angular/finki-chattery/src/app/auth-callback/auth-callback.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/auth-callback/auth-callback.component.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
+++ src/Clients/Angular/finki-chattery/src/app/auth-callback/auth-callback.component.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+import { AuthService, RedirectService } from '../core/services';
+
+@Component({
+  selector: 'app-auth-callback',
+  template: ''
+})
+export class AuthCallbackComponent implements OnInit {
+  constructor(private redirect: RedirectService, private auth: AuthService) {}
+
+  async ngOnInit(): Promise<void> {
+    await this.auth.completeAuthentication();
+    this.redirect.redirectLoggedInUser();
+  }
+}
Index: src/Clients/Angular/finki-chattery/src/app/core/guards/authorized.guard.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/guards/authorized.guard.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/core/guards/authorized.guard.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -1,6 +1,5 @@
 import { Injectable } from '@angular/core';
 import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
-import { Observable } from 'rxjs';
-import { map } from 'rxjs/operators';
+
 import { AuthService } from '../services';
 
@@ -11,15 +10,11 @@
   constructor(private auth: AuthService) {}
 
-  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
-    return this.auth.isLoggedIn().pipe(
-      map((loggedIn) => {
-        if (!loggedIn) {
-          this.auth.login();
-          return false;
-        }
+  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
+    if (this.auth.isLoggedIn()) {
+      return true;
+    }
 
-        return true;
-      })
-    );
+    this.auth.login();
+    return false;
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/core/interceptors/token.interceptor.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -2,5 +2,4 @@
 import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
 import { Observable } from 'rxjs';
-import { switchMap } from 'rxjs/operators';
 
 import { AuthService } from '../services';
@@ -16,12 +15,9 @@
     }
 
-    return this.auth.currentUserToken().pipe(
-      switchMap((token) => {
-        const requestToForward = request.clone({
-          setHeaders: { Authorization: `Bearer ${token}` }
-        });
-        return next.handle(requestToForward);
-      })
-    );
+    const requestToForward = request.clone({
+      setHeaders: { Authorization: `Bearer ${this.auth.currentUserToken()}` }
+    });
+
+    return next.handle(requestToForward);
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -1,6 +1,5 @@
 import { Injectable } from '@angular/core';
-import { UserManager } from 'oidc-client';
-import { Observable, from, of } from 'rxjs';
-import { map, switchMap } from 'rxjs/operators';
+import { User, UserManager } from 'oidc-client';
+import { Observable, of } from 'rxjs';
 
 import { environment } from '@env/environment';
@@ -15,9 +14,12 @@
     authority: environment.identityRoute,
     client_id: environment.identityClientId,
-    redirect_uri: `${window.location.origin}`,
+    redirect_uri: `${window.location.origin}/auth-callback`,
     response_type: 'id_token token',
     scope: 'openid app.api.finki-chattery profile',
     post_logout_redirect_uri: window.location.origin
   });
+
+  public user: ApplicationUser | null = null;
+  public oidcUser: User | null = null;
 
   constructor(private baseApi: BaseApiService) {}
@@ -31,63 +33,41 @@
   }
 
-  public isLoggedIn(): Observable<boolean> {
-    return from(this.userManager.getUser()).pipe(
-      map((user) => {
-        if (user) {
-          if (user.expired) {
-            return false;
-          }
-
-          return true;
-        }
-
-        return false;
-      })
-    );
+  public isLoggedIn(): boolean {
+    if (this.oidcUser) {
+      return !this.oidcUser.expired;
+    }
+    return false;
   }
 
-  public currentUser(): Observable<ApplicationUser | null> {
-    return from(this.userManager.getUser()).pipe(
-      map((user) => {
-        if (!user) {
-          return null;
-        }
-
-        return new ApplicationUser(
-          user.profile.id,
-          user.profile.userType,
-          user.profile.emailAddress,
-          user.profile.username,
-          user.profile.isVerified
-        );
-      })
-    );
+  public currentUser(): ApplicationUser | null {
+    return this.user;
   }
 
-  public currentUserToken(): Observable<string> {
-    return from(this.userManager.getUser()).pipe(
-      map((user) => {
-        if (user?.access_token) {
-          return user.access_token;
-        }
+  public currentUserToken(): string {
+    if (this.oidcUser) {
+      return this.oidcUser.access_token;
+    }
 
-        return '';
-      })
-    );
+    return '';
   }
 
   public selfUserDto(): Observable<SelfUserResponse | null> {
-    return this.isLoggedIn().pipe(
-      switchMap((loggedIn) => {
-        if (loggedIn) {
-          return this.baseApi.getSelfUser();
-        }
-        return of(null);
-      })
-    );
+    if (this.isLoggedIn()) {
+      return this.baseApi.getSelfUser();
+    }
+    return of(null);
   }
 
-  public signupCallback(): Observable<boolean> {
-    return from(this.userManager.signinRedirectCallback()).pipe(map((user) => user !== null));
+  public async completeAuthentication(): Promise<void> {
+    return await this.userManager.signinRedirectCallback().then((user: User) => {
+      this.oidcUser = user;
+      this.user = new ApplicationUser(
+        user.profile.id,
+        user.profile.userType,
+        user.profile.emailAddress,
+        user.profile.username,
+        user.profile.isVerified
+      );
+    });
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/redirect.service.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -1,5 +1,4 @@
 import { Injectable } from '@angular/core';
 import { Router } from '@angular/router';
-import { switchMap } from 'rxjs/operators';
 
 import { ApplicationUserType } from 'src/app/shared-app/models';
@@ -13,18 +12,15 @@
 
   public redirectLoggedInUser(): void {
-    this.auth
-      .signupCallback()
-      .pipe(switchMap(() => this.auth.currentUser()))
-      .subscribe((currentUser) => {
-        if (currentUser) {
-          switch (currentUser.userType) {
-            case ApplicationUserType.Student:
-              this.router.navigateByUrl(`questioning/preview`);
-              break;
-            case ApplicationUserType.Teacher:
-              break;
-          }
-        }
-      });
+    const currentUser = this.auth.user;
+
+    if (currentUser) {
+      switch (currentUser.userType) {
+        case ApplicationUserType.Student:
+          this.router.navigateByUrl(`questioning/preview`);
+          break;
+        case ApplicationUserType.Teacher:
+          break;
+      }
+    }
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -2,4 +2,4 @@
   <span>FinkiChattery</span>
   <span class="right"></span>
-  <app-button *ngIf="loggedIn" (action)="logout()" [buttonType]="ButtonType.CallToAction">Logout</app-button>
+  <app-button *ngIf="auth.isLoggedIn()" (action)="logout()" [buttonType]="ButtonType.CallToAction">Logout</app-button>
 </mat-toolbar>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -10,11 +10,8 @@
 export class HeaderComponent implements OnInit {
   ButtonType = ButtonType;
-  loggedIn = false;
 
-  constructor(private auth: AuthService) {}
+  constructor(public auth: AuthService) {}
 
-  ngOnInit(): void {
-    this.auth.isLoggedIn().subscribe((loggedIn) => (this.loggedIn = loggedIn));
-  }
+  ngOnInit(): void {}
 
   logout(): void {
Index: src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json
===================================================================
--- src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json	(revision 8b6791fbd76406e78daafeef77de70d20eec9fa6)
+++ src/FinkiChattery/FinkiChattery.Identity/appsettings.Development.json	(revision 5ad59881617ddfad4795a5c5d348a28d7dcbb5cf)
@@ -10,5 +10,5 @@
 				{
 					"allowedCorsOrigins": [ "http://localhost:4200" ],
-					"redirectUris": [ "http://localhost:4200" ],
+					"redirectUris": [ "http://localhost:4200/auth-callback" ],
 					"postLogoutRedirectUris": [ "http://localhost:4200" ]
 				}
