FedCM の更新: Domain Hint API

Chrome 123 以降では、Federated Credential Management API(FedCM)と併せてドメインヒントを使用できます。Domain Hint API を使用すると、受け入れたドメインの連携ログイン アカウントのみを表示することで、ユーザー エクスペリエンスを向上させることができます。

Domain Hint API

FedCM を使用すると、ユーザーが ID プロバイダ(IdP)から提供されたアカウント情報を使用して、信頼できる当事者(RP、ウェブサイトを参照)に簡単にログインできます。ただし、特定のドメインに関連付けられたアカウントのみがサイトへのログインを許可されていることを RP がすでに把握している場合があります。これは、アクセス先のサイトが会社のドメインに限定されている企業のシナリオで特によく発生します。ユーザー エクスペリエンスを向上させるため、FedCM API では RP へのログインに使用できるアカウントのみを 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 Hint は「このアカウントはどの企業またはサーバーに属している必要がありますか?」という質問に答えることを目的としています。

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

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

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