FedCM の更新: Domain Hint API

Chrome 123 以降では、Federated Credential Management API(FedCM)とともにドメインヒントを使用できます。Domain Hint API を使用すると、デベロッパーは、承諾したドメインのフェデレーション ログイン アカウントのみを表示することで、ユーザー エクスペリエンスを向上させることができます。

Domain Hint API

FedCM を使用すると、ユーザーは ID プロバイダ(IdP)から提供されたアカウント情報を使用して、証明書利用者(RP、ウェブサイトを参照する RP)に簡単にログインできます。ただし、特定のドメインに関連付けられたアカウントのみがサイトにログインできることを RP がすでに知っている場合もあります。これは、アクセス先のサイトが企業のドメインに制限されている企業のシナリオで特に一般的です。ユーザー エクスペリエンスを向上させるため、FedCM API では、RP へのログインに使用できるアカウントのみを表示できます。これにより、ユーザーが企業ドメイン外のアカウントを使用して RP にログインしようとしても、適切な種類のアカウントが使用されなかったために、後でエラー メッセージが表示される(またはログインが機能しなかったために無音状態になる)というシナリオを防ぐことができます。

Domain Hint API を使用すると、RP は FedCM API 呼び出しに domainHint プロパティを指定して、ユーザーに一致するアカウントのみを表示できます。IdP は、アカウント リスト エンドポイントからのレスポンスの一部として domain_hints プロパティを提供し、アカウントがどのドメインに関連付けられているかを示します。これにより、ブラウザはリクエストされたドメインヒントを IdP に開示することなく、一致するアカウントを表示できます。

アカウント リスト エンドポイントからの JSON レスポンスの例を次に示します。

{
 "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"]
  }]
}

RP は、domainHint プロパティを指定して navigator.credentials.get() を呼び出し、アカウントをフィルタリングできます。たとえば、ユーザーが corp-partner.example にアクセスし、corp.example のアカウントでログインしたとします。サイトでは、次のように API を呼び出します。

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

domainHint 値は、サーバーサイド フィルタリングのためにアカウント リスト エンドポイントに送信されません。これは、IdP へのフィンガープリント ベクトルになる可能性があるためです。代わりに、Chrome は通常どおり FedCM リクエストを実行し、navigator.credentials.get() 呼び出しで指定された domainHint 値と一致しないアカウントを除外します。次に、Chrome で FedCM ダイアログと新しいアカウント リストがユーザーに表示されます。この方法は Login Hint API と似ていますが、この 2 つの API では答えが異なります。Login Hint API は「どのユーザーの ID か」を調べることを目的としていますが、Domain Hints は「このアカウントがどの企業またはサーバーに属している必要があるか」を調べることを目的としています。

domainHint: "any" を使用すると、ドメインがない(domain_hints が渡されていないか空である)アカウントは除外されます。たとえば、RP が登録プロセスで管理対象アカウントのみを許可するユースケースがこれに該当します。

domainHint に一致するアカウントがない場合、FedCM ダイアログにログイン プロンプトが表示されます。ユーザーはこのプロンプトを使用して、RP からリクエストされたヒントに一致する IdP アカウントにログインできます。ユーザーがプロンプトをタップすると、構成ファイルで指定されたログイン URL でポップアップ ウィンドウが開きます。リンクには、ログインヒントとドメインヒントのクエリ パラメータが追加されます。

domainHint に一致するアカウントがない場合のログイン プロンプトの例
domainHint に一致するアカウントがない場合のログイン プロンプトの例