Masuk senyap dengan ssoSilent()

Jika Anda sudah memiliki sesi yang ada dengan server autentikasi, Anda dapat menggunakan ssoSilent() API untuk membuat permintaan token tanpa interaksi.

Dengan Petunjuk Pengguna

Jika Anda sudah memiliki informasi masuk pengguna, Anda dapat meneruskan ini ke API untuk meningkatkan performa dan memastikan bahwa server otorisasi akan mencari sesi akun yang benar. Anda dapat meneruskan salah satu hal berikut ke objek permintaan agar berhasil mendapatkan token secara diam-diam.

  • account (yang dapat diambil menggunakan salah satu API akun)
  • sid (yang dapat diambil dari idTokenClaims suatu objek account)
  • login_hint (yang dapat diambil dari properti username dari objek akun atau klaim upn dalam token ID)

Melewati akun akan mencari sid dalam klaim token, lalu kembali ke loginHint (jika disediakan) atau nama pengguna akun.

const silentRequest: SsoSilentRequest = {
    scopes: ["User.Read", "Mail.Read"],
    loginHint: "user@contoso.com"
};

this.authService.ssoSilent(silentRequest)
    .subscribe({
        next: (result) => console.log("Success!"), // Handle result
        error: (error) => console.log(error) // Handle error
    });

Tanpa Petunjuk Pengguna

Jika tidak ada cukup informasi yang tersedia tentang pengguna, Anda dapat mencoba menggunakan ssoSilent API tanpa melewati account, sid atau login_hint.

const silentRequest = {
    scopes: ["User.Read", "Mail.Read"]
};

Namun, ketahuilah bahwa jika aplikasi Anda memiliki jalur kode untuk beberapa pengguna dalam satu sesi browser, atau jika pengguna memiliki beberapa akun untuk sesi browser tunggal tersebut, maka ada kemungkinan kesalahan masuk senyap yang lebih tinggi. Anda mungkin melihat kesalahan berikut muncul jika server otorisasi menemukan beberapa sesi akun:

InteractionRequiredAuthError: interaction_required: AADSTS16000: Either multiple user identities are available for the current request or selected account is not supported for the scenario.

Ini menunjukkan bahwa server tidak dapat menentukan akun mana yang akan masuk, dan akan memerlukan salah satu parameter di atas (account, , login_hint) sidatau masuk interaktif untuk memilih akun.

Menangani Kegagalan

Jika ssoSilent() gagal, sebaiknya tangani kesalahan ini dengan masuk secara interaktif. Berikut adalah contoh ssoSilent() yang digunakan dalam aplikasi app.component.ts:

import { Component, OnInit } from '@angular/core';
import { MsalService } from '@azure/msal-angular';
import { SilentRequest, SsoSilentRequest } from '@azure/msal-browser';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  constructor(
    private authService: MsalService,
  ) {}

  ngOnInit(): void {
    const silentRequest: SsoSilentRequest = {
      scopes: ["User.Read"],
      loginHint: "user@contoso.com"
    }

    this.authService.ssoSilent(silentRequest)
      .subscribe({
        next: (result: AuthenticationResult) => {
          console.log("SsoSilent succeeded!"); // Handle result
        }, 
        error: (error) => {
          this.authService.loginRedirect(); // Handle error by logging in interactively
        }
      });
  }
}