Cannot GET Implicit Callback for Angular 8

Hi, I have an Angular 8 application that I would like to use Okta to authenticate users. I created a developer account & console and the authentication works depend on how I start my application. When I said it works, I mean the application will redirect me to the Okta Sign-In dialog and return me back to the original starting point.

If I start my Angular application using this command “ng serve --port 4200 -o”, then the authentication worked flawlessly. However, if I use this command “ng server --port 4200 -o -base-ref /myapp/”, then I will get Cannot GET /implicit/callback.

I am relatively new to Angular and Okta; therefore, I am not clear what the issue is? Can you help?

Thank you.

If you want to change the base href of your app, you’ll need to change the login redirect URI as well. Instead of using http://localhost:4200/implicit/callback, you’ll need to use http://localhost:4200/<your-base-href>/implicit/callback. You’ll also need to change the route for the OktaCallbackComponent:

const appRoutes: Routes = [
  {
    path: '<your-base-href>/implicit/callback',
    component: OktaCallbackComponent
  },
  ...
]

I followed your instruction and it did not quite work. Perhaps, it is due to my lack of knowledge on the configuration. I included my configuration from the developer console and my client-side code below.

Error

Raw Text

(upload://nQuPwF65KCmp6oo04KdqheZg2a6.png)
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: ‘implicit/callback’
Error: Cannot match any routes. URL Segment: ‘implicit/callback’
at ApplyRedirects.push…/node_modules/@angular/router/fesm5/router.js.ApplyRedirects.noMatchError (router.js:2459)
at CatchSubscriber.selector (router.js:2440)
at CatchSubscriber.push…/node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:34)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
at ThrowIfEmptySubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79)
at resolvePromise (zone.js:852)
at resolvePromise (zone.js:809)
at zone.js:913
at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:26246)
at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push…/node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at drainMicroTaskQueue (zone.js:601)
at ZoneTask.push…/node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
at invokeTask (zone.js:1693)

Angular TypeScript

const ISSUER = 'https://dev-xxxxx.okta.com/oauth2/default';
const CALLBACK_PATH = 'BusinessContinuity/implicit/callback';
const REDIRECT_URI = 'http://localhost:4200/BusinessContinuity/implicit/callback';
const CLIENT_ID = 'xxxxxxxxxxxxxxxx';

const config = {
  issuer: ISSUER,              
  redirectUri: REDIRECT_URI,   
  clientId: CLIENT_ID,
  scopes: ['openid', 'profile', 'email'],
  pkce: true
};

Route
{
path: CALLBACK_PATH,
component: OktaCallbackComponent
}

Developer Console Configuration

Maybe it’s easier to ask: why do you want to do this? It seems like you’re making things harder than they need to be, but I’m guessing you have a good reason for wanting to have a base-href that’s not the default.

I inherited this project from a previous developer and I don’t know what his rationale was for doing it either. Since I am so new to Angular, I did not question it.

The only difference is that the URL would read like this without the base-ref: http://localhost:4200/home instead of http://localhost:4200/base-ref/home.

I am curious if it has anything to do with IIS virtual directory or not.

Thank you for your help.

Can you any help please, i’m having issues implicit/callback

I’m using Angular 8, OKTA and Apache httpd server. FYI I did updated .htaccess

ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: ‘implicit/callback’
Error: Cannot match any routes. URL Segment: ‘implicit/callback’
at ar.noMatchError (main-es2015.2b92338aaa6db165e9da.js:1)
at tt.selector (main-es2015.2b92338aaa6db165e9da.js:1)
at tt.error (main-es2015.2b92338aaa6db165e9da.js:1)
at l._error (main-es2015.2b92338aaa6db165e9da.js:1)
at l.error (main-es2015.2b92338aaa6db165e9da.js:1)
at l._error (main-es2015.2b92338aaa6db165e9da.js:1)
at l.error (main-es2015.2b92338aaa6db165e9da.js:1)
at l._error (main-es2015.2b92338aaa6db165e9da.js:1)
at l.error (main-es2015.2b92338aaa6db165e9da.js:1)
at Ue._error (main-es2015.2b92338aaa6db165e9da.js:1)
at v (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)
at v (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)
at polyfills-es2015.5b10b8fd823b6392f1fd.js:1
at a.invokeTask (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)
at Object.onInvokeTask (main-es2015.2b92338aaa6db165e9da.js:1)
at a.invokeTask (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)
at s.runTask (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)
at _ (polyfills-es2015.5b10b8fd823b6392f1fd.js:1)

hi naveen i am also facing same problem did you got any solution?

@tharun_97

Issue resolved by following below link:

1 Like