Chrome 120 include l'API Login Status per FedCM. L'API Login Status (in precedenza API IdP Sign-in Status) consente ai siti web, in particolare ai provider di identità, di segnalare al browser quando i loro utenti accedono e escono. Questo indicatore viene utilizzato da FedCM per risolvere un problema di attacco di temporizzazione silenzioso e, in questo modo, consente a FedCM di operare senza cookie di terze parti. Questo aggiornamento riguarda le ultime modifiche non compatibili con le versioni precedenti che abbiamo precedentemente identificato nell'Intent to Ship originale di FedCM, nell'ambito del nostro ambito di lavoro.
Sebbene l'API Login Status migliori la proprietà della privacy e l'usabilità, si tratta di una modifica non compatibile con le versioni precedenti una volta rilasciata. Se hai già implementato FedCM, assicurati di aggiornarlo seguendo le istruzioni riportate di seguito.
Inoltre, Chrome offre due nuove funzionalità di Gestione delle credenziali federate (FedCM):
- API Error: notifica agli utenti quando il loro tentativo di accesso non va a buon fine con un'interfaccia utente nativa basata sulla risposta del server dall'endpoint di affermazione dell'ID, se presente.
- API Auto-Selected Flag: invia una notifica all'identity provider (IdP) e alla relying party (RP) se una credenziale è stata selezionata automaticamente nel flusso.
API Login Status
L'API Login Status è un meccanismo in cui un sito web, in particolare un IdP, informa il browser dello stato di accesso dell'utente sull'IdP. Con questa API, il browser può ridurre le richieste non necessarie all'IDP e mitigare i potenziali attacchi di temporizzazione.
Informare il browser sullo stato di accesso dell'utente
Gli IdP possono segnalare lo stato di accesso dell'utente al browser inviando un'intestazione HTTP o chiamando un'API JavaScript quando l'utente ha eseguito l'accesso all'IdP o quando ha eseguito la disconnessione da tutti i suoi account IdP. Per ogni IdP (identificato dall'URL di configurazione), il browser mantiene una variabile tri-stato che rappresenta lo stato di accesso con i possibili valori logged-in
, logged-out
e unknown
. Lo stato predefinito è unknown
.
Per indicare che l'utente ha eseguito l'accesso, invia un'intestazione HTTP Set-Login: logged-in
in una navigazione di primo livello o in una richiesta di risorsa secondaria dello stesso ambito:
Set-Login: logged-in
In alternativa, chiama l'API JavaScript navigator.login.setStatus('logged-in')
dall'origine dell'IDP:
navigator.login.setStatus('logged-in');
Queste chiamate registrano lo stato di accesso dell'utente come logged-in
. Quando lo stato di accesso dell'utente è impostato su logged-in
, l'RP che chiama FedCM invia richieste all'endpoint dell'elenco di account dell'IDP e mostra all'utente gli account disponibili nella finestra di dialogo FedCM.
Per segnalare che l'utente ha eseguito la disconnessione da tutti i suoi account, invia l'intestazione HTTP Set-Login:
logged-out
in una navigazione di primo livello o in una richiesta di risorsa secondaria dello stesso ambito:
Set-Login: logged-out
In alternativa, chiama l'API JavaScript navigator.login.setStatus('logged-out')
dall'origine dell'IDP:
navigator.login.setStatus('logged-out');
Queste chiamate registrano lo stato di accesso dell'utente come logged-out
. Quando lo stato di accesso dell'utente è logged-out
, la chiamata a FedCM non va a buon fine e non viene effettuata alcuna richiesta all'endpoint dell'elenco di account dell'IDP.
Lo stato unknown
viene impostato prima che l'IDP invii un segnale utilizzando l'API Login Status. Abbiamo introdotto questo stato per una transizione migliore, perché un utente potrebbe già aver eseguito l'accesso all'IDP quando viene rilasciata questa API. L'IdP potrebbe non avere la possibilità di segnalarlo al browser al momento della prima chiamata di FedCM. In questo caso, inviamo una richiesta all'endpoint dell'elenco di account dell'IDP e aggiorniamo lo stato in base alla risposta dell'endpoint dell'elenco di account:
- Se l'endpoint restituisce un elenco di account attivi, aggiorna lo stato su
logged-in
e apri la finestra di dialogo FedCM per visualizzare gli account. - Se l'endpoint non restituisce account, aggiorna lo stato su
logged-out
e interrompi la chiamata FedCM.
Che cosa succede se la sessione utente scade? Consenti all'utente di accedere tramite un flusso di accesso dinamico.
Anche se l'IdP continua a informare il browser dello stato di accesso dell'utente, lo stato potrebbe non essere sincronizzato, ad esempio quando la sessione scade. Il browser tenta di inviare una richiesta con credenziali all'endpoint dell'elenco di account quando lo stato di accesso è logged-in
, ma il server non restituisce account perché la sessione non è più disponibile. In questo scenario, il browser può consentire all'utente di accedere dinamicamente all'IdP tramite una finestra di dialogo.
La finestra di dialogo FedCM mostra un messaggio che suggerisce di accedere, come mostrato nell'immagine seguente.

Quando l'utente fa clic sul pulsante Continua, il browser apre una finestra di dialogo per la pagina di accesso dell'IDP.

L'URL della pagina di accesso viene specificato con login_url
all'interno del file di configurazione dell'IdP.
{
"accounts_endpoint": "/auth/accounts",
"client_metadata_endpoint": "/auth/metadata",
"id_assertion_endpoint": "/auth/idtokens",
"login_url": "/login"
}
}
La finestra di dialogo è una normale finestra del browser con cookie proprietari. Tutto ciò che accade nella finestra di dialogo dipende dall'IDP e non sono disponibili handle finestra per effettuare una richiesta di comunicazione cross-origin alla pagina RP. Dopo che l'utente ha eseguito l'accesso, l'IdP deve:
- Invia l'intestazione
Set-Login: logged-in
o chiama l'APInavigator.login.setStatus("logged-in")
per informare il browser che l'utente ha eseguito l'accesso. - Chiama
IdentityProvider.close()
per chiudere la finestra di dialogo.

Puoi provare il comportamento dell'API Login Status nella nostra demo.
- Tocca il pulsante Vai all'IdP e accedi.
- Accedi con un account arbitrario.
- Seleziona Session Expired (Sessione scaduta) dal menu a discesa Account Status (Stato account).
- Premi il pulsante Aggiorna informazioni personali.
- Tocca il pulsante Visita la RP per provare FedCM.
Dovresti essere in grado di osservare l'accesso all'IDP tramite il comportamento del modulo.
API Error
Quando Chrome invia una richiesta all'endpoint di affermazione dell'identità (ad esempio, quando un utente fa clic sul pulsante Continua come nell'interfaccia utente di FedCM o viene attivata la riconferma automatica), l'IdP potrebbe non essere in grado di emettere un token per motivi legittimi. Ad esempio, se il client non è autorizzato, il server è temporaneamente non disponibile e così via. Al momento, Chrome non riesce a soddisfare la richiesta in silenzio in caso di questi errori e ne informa l'RP solo rifiutando la promessa.
Con l'API Error, Chrome informa l'utente mostrando un'interfaccia utente nativa con le informazioni sull'errore fornite dall'IDP.

API HTTP dell'identità provider
Nella risposta id_assertion_endpoint
, l'IdP può restituire un token al browser se può essere emesso su richiesta. In questa proposta, se non è possibile emettere un token, l'IdP può restituire una risposta "error", che contiene due nuovi campi facoltativi:
code
url
// id_assertion_endpoint response
{
"error": {
"code": "access_denied",
"url": "https://idp.example/error?type=access_denied"
}
}
Per il codice, l'IdP può scegliere uno degli errori noti dall'elenco di errori specificati di OAuth 2.0 [invalid_request
, unauthorized_client
, access_denied
, server_error
etemporarily_unavailable
] o utilizzare una stringa arbitraria. In questo caso, Chrome visualizza l'interfaccia utente di errore con un messaggio di errore generico e passa il codice all'RP.
Per url
, identifica una pagina web leggibile da un utente con informazioni sull'errore per fornire agli utenti informazioni aggiuntive sull'errore. Questo campo è utile per gli utenti perché i browser non possono fornire messaggi di errore dettagliati in un'interfaccia utente nativa. Ad esempio, link per i passaggi successivi, dati di contatto dell'assistenza clienti e così via. Se un utente vuole saperne di più sui dettagli dell'errore e su come correggerlo, può visitare la pagina fornita dall'interfaccia utente del browser per ulteriori dettagli. L'URL deve appartenere allo stesso sito dell'IdP configURL
.
try {
const cred = await navigator.credentials.get({
identity: {
providers: [
{
configURL: 'https://idp.example/manifest.json',
clientId: '1234',
},
],
}
});
} catch (e) {
const code = e.code;
const url = e.url;
}
API di flag selezionati automaticamente
mediation: optional
è il comportamento predefinito della mediazione degli utenti nell'API Credential Management e attiva la ricoinvenzione automatica, se possibile. Tuttavia, la riconferma automatica dell'autenticazione potrebbe essere
non disponibile per motivi che
solo il browser conosce. Quando non è disponibile, all'utente potrebbe essere richiesto di eseguire
l'accesso con la mediazione dell'utente esplicita, che è un flusso con proprietà diverse.
- Dal punto di vista di un chiamante dell'API, quando riceve un token ID, non ha visibilità sul fatto che si tratti del risultato di un flusso di autenticazione automatica. Ciò rende difficile per loro valutare il rendimento dell'API e migliorare di conseguenza l'esperienza utente.
- Dal punto di vista dell'IDP, non è ugualmente in grado di stabilire se è avvenuta o meno una nuova autenticazione automatica per la valutazione del rendimento. Inoltre, la presenza di una mediazione esplicita da parte dell'utente potrebbe aiutarli a supportare più funzionalità correlate alla sicurezza. Ad esempio, alcuni utenti potrebbero preferire un livello di sicurezza più elevato che richiede la mediazione esplicita dell'utente nell'autenticazione. Se un fornitore di identità riceve una richiesta di token senza questa mediazione, potrebbe gestire la richiesta in modo diverso. Ad esempio, restituisci un codice di errore in modo che l'RP possa chiamare di nuovo l'API FedCM con
mediation: required
.
Pertanto, fornire visibilità al flusso di autenticazione automatica sarebbe utile per gli sviluppatori.
Con l'API Flag selezionato automaticamente, Chrome condivide con l'IdP e l'RP se è stata acquisita un'autorizzazione utente esplicita toccando il pulsante Continua come ogni volta che si verifica la riconferma automatica o una mediazione esplicita. La condivisione avviene solo dopo che è stata concessa all'utente l'autorizzazione per la comunicazione con l'IDP/RP.
Condivisione con l'IdP
Per condividere le informazioni con l'IDP dopo l'autorizzazione dell'utente, Chrome include
is_auto_selected=true
nella richiesta POST
inviata al
id_assertion_endpoint
:
POST /fedcm_assertion_endpoint HTTP/1.1
Host: idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity
account_id=123&client_id=client1234&nonce=Ct0D&disclosure_text_shown=true&is_auto_selected=true
Condivisione RP
Il browser può condividere le informazioni con l'RP in isAutoSelected
tramite
IdentityCredential
:
const cred = await navigator.credentials.get({
identity: {
providers: [{
configURL: 'https://idp.example/manifest.json',
clientId: '1234'
}]
}
});
if (cred.isAutoSelected !== undefined) {
const isAutoSelected = cred.isAutoSelected;
}
Coinvolgere e condividere feedback
Se hai feedback o riscontri problemi durante il test, puoi condividerli su crbug.com.
Foto di Girl with red hat su Unsplash