angular -auth-oid c -клиент в приложении Ioni c Android - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать angular-auth-oidc-client в приложении Android Ioni c - Angular, проверяющем подлинность сервера MS Identity.

Версии:

  • angular-auth-oidc-client 11.1.4
  • @angular 10.0.2
  • @ionic/angular 5.2.3

Платформа конденсатора: Android

Где я:

  • Аутентификация прошла успешно при запуске простого веб-приложения (из настольного браузера)
  • Фильтр намерений объявлен в манифесте android, и приложение правильно открывается при авторизации- сервер перенаправляет на my-app: // login-callback (реальное Android устройство).
  • Используя плагин Deeplinks, я могу перехватывать вызовы обратного вызова входа в систему и читать строку запроса, содержащую код, область действия, параметры state и session_state.

Что делать дальше? Аутентификация остается ложной. Что мне следует вызвать с помощью callback-функции queryString?

Я нашел это CallBackService, которое, кажется, соответствует моим потребностям, но, к сожалению, не является частью lib publi c API: /

1 Ответ

0 голосов
/ 11 июля 2020

Найдено:

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent implements OnInit, OnDestroy {
  private deeplinksRouteSubscription: Subscription;

  constructor(
    private platform: Platform,
    private navController: NavController,
    private deeplinks: Deeplinks,
    private oidcSecurityService: OidcSecurityService
  ) {
  }

  setupDeeplinks() {
    this.deeplinksRouteSubscription = this.deeplinks.routeWithNavController(this.navController, {}).subscribe(
      (match) => {
        const callbackUrl = match.$link.path + '?' + match.$link.queryString;
        this.navController.navigateForward(callbackUrl).then(() => {
          this.oidcSecurityService.checkAuth().toPromise();
        });
      },
      (nomatch) => {
        console.error("Got a deeplink that didn't match", JSON.stringify(nomatch));
      }
    );
  }

  ngOnInit() {
    this.platform.ready().then(async () => {
      this.oidcSecurityService.checkAuth().subscribe((auth) => console.log('IS AUTHENTICATED: ', auth));

      console.log('PLATFORMS: ' + this.platform.platforms());
      if (this.platform.is('capacitor')) {
        this.setupDeeplinks();
        const { SplashScreen, StatusBar } = Plugins;
        StatusBar.setStyle({ style: StatusBarStyle.Light });
        SplashScreen.hide();

        await AppCenterCrashes.setEnabled(true);
      }
    });
  }

  ngOnDestroy(): void {
    this.deeplinksRouteSubscription?.unsubscribe();
  }

  login() {
    this.oidcSecurityService.authorize();
  }

  logout() {
    this.oidcSecurityService.logoff();
  }
}
...