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 parte di base (RP, in riferimento a un sito web) utilizzando i dati dell'account forniti da un provider di identità (IdP). Tuttavia, in alcuni casi la parte soggetta a limitazioni sa già che solo gli account associati a un determinato dominio possono accedere al sito. Questo accade spesso in scenari aziendali in cui il sito a cui si accede è limitato a un dominio aziendale. Per offrire una migliore esperienza utente, l'API FedCM consente alla parte soggetta a limitazioni di mostrare solo gli account che possono essere utilizzati per accedere alla parte soggetta a limitazioni. In questo modo si evitano scenari in cui un utente tenta di accedere alla parte soggetta a limitazioni utilizzando un account esterno al dominio aziendale e verrà visualizzato in un secondo momento un messaggio di errore per visualizzare un messaggio di errore o silenziare l'accesso alla parte soggetta a limitazioni 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 come parte di una risposta dall'endpoint dell'elenco degli 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.

Una risposta JSON di esempio dall'endpoint dell'elenco di account potrebbe essere la 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"]
  }]
}

La parte soggetta a limitazioni può chiamare navigator.credentials.get() con una proprietà domainHint per filtrare gli account. Ad esempio, supponiamo che un utente visiti corp-partner.example e accedi con un account da corp.example. Il sito richiama l'API nel seguente modo:

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 account per il filtro lato server, poiché 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 identificativo 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 nessun account corrisponde a domainHint.