El cierre de sesión de Okta no funciona en la aplicación Angular

CorePress2024-01-25  8

Estoy usando OKTA SDK para el siguiente angular, ingrese la descripción del enlace aquí

esta documentación. También estoy usando OktaCallbackComponent y OktaAuthService para la autenticación. Puedo iniciar sesión exitosamente. después de iniciar sesión correctamente, OKTA me redirige a OktaCallbackComponent donde almacenan algunas claves en localstroge y, finalmente, me dirigen a mi página principal.

Ahora, cuando hago clic en el botón de cerrar sesión en la aplicación, no funciona. Tal como lo veo, la página se carga e inmediatamente navega al componente de devolución de llamada y nuevamente navega a la página principal. mientras que quiero que la página de inicio de sesión llegue al usuario.

esta es mi función de cierre de sesión.

  async logout(){
   this.oktaAuth.tokenManager.clear()
   await this.oktaAuth.signOut();
   this.router.navigate(['/login']);
   this.toastr.success('Logout Successfully', 'See you next time' , {timeOut: 5000});
  }

¿Alguien puede ayudarme con cuál podría ser el problema?

  {
    path: 'main',
    component: OpDataTableComponent,
    canActivate: [ OktaAuthGuard ],
    data: {
      title: 'Main Page'
    }
  },


 {
    path: CALLBACK_PATH,
    component: OktaCallbackComponent,
    // Later: Add a component
  },

  {
    path: 'login',
    // component: LoginComponent,
    component:OktaLoginComponent,
    canActivate: [checkAfterLoginService],
    
    data: {
      title: 'Login Page'
    }
  }

CheckAfterLoginService

export class checkAfterLoginService {
  constructor(private oktaAuth: OktaAuthService,private tokenService: TokenService, private router: Router) { }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
    if(this.oktaAuth.isAuthenticated())
    {
      return this.router.navigateByUrl('/main');
    }else
    {
      return false;
    }
  }
}

Octava estafafiguración.

const ISSUER = 'https://...../oauth2/default';
const HOST = window.location.host;
const REDIRECT_URI = 'https://..../callback';
const SCOPES = 'openid profile email';

const config = {
  issuer: ISSUER,
  clientId: '.....',
  redirectUri: REDIRECT_URI,
  scopes: SCOPES.split(/\s+/)
};

La URL de cierre de sesión P.s agregada a la configuración de la aplicación es https://../ruta de inicio de sesión. ¿Cómo puedo solucionar el problema o cuál podría ser el problema? tu ayuda es muy apreciada.

No he iniciado sesión en ninguna otra pestaña ni en la cuenta de la organización okta.

-Talib Daryabi

28/03/2021 a las 10:42

¿Ves un error CORS en y?nuestra consola del navegador? Es posible que tengas que agregar http://localhost:4200 como origen confiable en Okta.

- Matt Raible

28/03/2021 a las 16:31

@MattRaible, Hola, no, no veo ningún error de CORS en mi consola.

-Talib Daryabi

29 de marzo de 2021 a las 3:49

@MattRaible Estoy experimentando dos comportamientos diferentes, y los explico en los comentarios a continuación.

-Talib Daryabi

29 de marzo de 2021 a las 4:05

@MattRaible En el primer paso, inicio sesión en www.mywebsite.com (aplicación registrada en mi organización externa) ahora, en el segundo paso, ingreso www. Vista previa de ABC-okta. En la otra pestaña no me pide el proceso de autenticación. En cambio, me redirige a la página www.abc-oktapreview.com/app/UserHome. Y por último, cuando cierro sesión en www.abc-oktapreviw.com/app/UserHome, este proceso se realiza correctamente y ahora, cuando intento cerrar sesión en www.mywebsite.com, funciona, en resumen, para cerrar sesión correctamente. Debo cerrar sesión en mi okta-órganoización primero y desde mi solicitud al final.

-Talib Daryabi

29 de marzo de 2021 a las 4:17



------------------------------------

Intenta cambiar tu método de cierre de sesión() para que sea el siguiente:

async logout(){
  await this.oktaAuth.signOut();
  this.router.navigate(['/login']);
  this.toastr.success('Logout Successfully', 'See you next time' , {timeOut: 5000});
}

Actualmente estás borrando los tokens manualmente, lo que hace que nuestro SDK de Auth JS subyacente piense que ya has cerrado sesión. this.oktaAuth.signOut() debería limpiar los tokens por usted. Si aún desea borrarlos manualmente, asegúrese de hacerlo después de cerrar sesión().



------------------------------------

Tuve problemas similares, pero quería volver a redirigir a la pantalla de inicio de sesión de Okta. Esto es lo que funcionó en mi situación.

public logout(): void {
    const oktaBaseUrl: string = `${environment.okta.issuer}/v1`;
    const oktaTokenStorage: any = JSON.parse(localStorage.getItem('okta-token-storage'));
    const oktaIdToken = oktaTokenStorage?.idToken;

    this.oktaAuth.logout();
    window.location.href = `${oktaBaseUrl}/logout?id_token_hint=${oktaIdToken.idToken}&post_logout_redirect_uri=${environment.okta.postLogoutRedirectUri}`;
}

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare