Tiché přihlášení pomocí ssoSilent()

Pokud už máte relaci, která existuje s ověřovacím serverem, můžete pomocí ssoSilent() rozhraní API vytvořit požadavek na tokeny bez interakce.

S nápovědou pro uživatele

Pokud už máte přihlašovací informace uživatele, můžete ho předat do rozhraní API, abyste zlepšili výkon a zajistili, že autorizační server vyhledá správnou relaci účtu. Pokud chcete úspěšně získat token bezobslužně, můžete do objektu požadavku předat jednu z následujících možností.

  • account (které lze načíst pomocí rozhraní API účtu)
  • sid (který lze načíst z idTokenClaims objektu account)
  • login_hint (který lze načíst z vlastnosti username objektu účtu nebo z claimu upn v tokenu ID)

Po předání účtu se vyhledá identifikátor sid v claimech tokenu a poté se jako záložní možnost použije loginHint (pokud je zadaný) nebo uživatelské jméno účtu.

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
    });

Bez nápovědy pro uživatele

Pokud není o uživateli k dispozici dostatek informací, můžete zkusit použít rozhraní API ssoSilentaniž byste předali account, sid nebo login_hint.

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

Mějte ale na paměti, že pokud má vaše aplikace cesty kódu pro více uživatelů v jedné relaci prohlížeče nebo pokud má uživatel více účtů pro danou relaci prohlížeče, je vyšší pravděpodobnost chyb tichého přihlášení. Pokud autorizační server najde více relací účtu, může se zobrazit následující chyba:

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

To znamená, že server nemohl určit, ke kterému účtu se přihlásit, a bude vyžadovat jeden z výše uvedených parametrů (account, login_hint, sid) nebo interaktivní přihlášení k výběru účtu.

Zpracování chyb

Pokud se funkce ssoSilent() nezdaří, doporučujeme tuto chybu zpracovat interaktivně přihlášením. Tady je příklad použití ssoSilent() v aplikaci 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
        }
      });
  }
}