Aggiornamenti di FedCM: API Domain Hint

In Chrome 123, puoi utilizzare gli indizi di dominio insieme all'API Federated Credential Management (FedCM). Con l'API Domain Hint, gli sviluppatori possono offrire un'esperienza utente migliore mostrando solo gli account di accesso federati del dominio che accettano.

API Domain Hint

FedCM può essere utilizzato per semplificare l'accesso di un utente a una terza parte attendibile (RP, in riferimento a un sito web) utilizzando i dati dell'account forniti da un fornitore di identità (IdP). Tuttavia, in alcuni casi l'RP sa già che solo gli account associati a un determinato dominio sono autorizzati ad accedere al sito. Questo accade spesso in scenari aziendali in cui il sito a cui si accede è limitato a un dominio aziendale. Per offrire un'esperienza utente migliore, l'API FedCM consente all'RP di mostrare solo gli account che possono essere utilizzati per accedere all'RP. In questo modo si evitano scenari in cui un utente tenta di accedere all'RP utilizzando un account al di fuori del dominio aziendale, per poi ricevere un messaggio di errore in un secondo momento (o non ricevere alcun messaggio se l'accesso non è andato a buon fine) perché non è stato utilizzato il tipo di account corretto.

Con l'API Domain Hint, gli RP possono specificare una proprietà domainHint in una chiamata all'API FedCM per mostrare solo gli account corrispondenti per l'utente. L'IdP può fornire una proprietà domain_hints nell'ambito di una risposta dell'endpoint elenco account per indicare a quali domini è associato un account. In questo modo, il browser può mostrare gli account corrispondenti senza divulgare all'IdP l'indizio del dominio richiesto.

Un esempio di risposta JSON dall'endpoint dell'elenco di account è il seguente:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

L'RP può chiamare navigator.credentials.get() con una proprietà domainHint per filtrare gli account. Ad esempio, supponiamo che un utente visiti corp-partner.example e acceda con un account di corp.example. Il sito chiamerà l'API come segue:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

Il valore domainHint non viene inviato all'endpoint dell'elenco di account per il filtro lato server, in quanto può essere un vettore di fingerprinting per l'IDP. Invece, Chrome esegue una richiesta FedCM come di consueto e filtra gli account che non corrispondono al valore domainHint specificato dalla chiamata navigator.credentials.get(). Quindi, Chrome mostra all'utente la finestra di dialogo FedCM con l'elenco dei nuovi account. Questo approccio è simile all'API Login Hint, ma queste due API rispondono a domande diverse. L'API Login Hint ha lo scopo di rispondere alla domanda "Qual è un identificatore per l'utente che mi interessa?", mentre l'API Domain Hint ha lo scopo di rispondere alla domanda "A quale società o server deve appartenere questo account?".

Quando viene utilizzato domainHint: "any", Chrome filtra gli account che non hanno alcun dominio (ovvero domain_hints non viene passato o è vuoto). Ad esempio, questo consente casi d'uso in cui l'RP consente solo account gestiti nella procedura di registrazione.

Quando nessun account corrisponde a domainHint, la finestra di dialogo FedCM mostra una richiesta di accesso, che consente all'utente di accedere a un account IdP corrispondente al suggerimento richiesto dall'RP. Quando l'utente tocca la richiesta, si apre una finestra popup con l'URL di accesso specificato nel file di configurazione. Il link viene poi aggiunto con i parametri di query dell'indicazione di accesso e dell'indicazione del dominio.

Un esempio di richiesta di accesso quando nessun account corrisponde a domainHint.
Un esempio di richiesta di accesso quando non sono presenti account corrispondenti a domainHint.