プライベート ネットワーク アクセス権限プロンプトのオリジン トライアル: HTTPS を使用してウェブサイトを移行するパス

Yifan Luo
Yifan Luo

背景

Chrome 94 では、保護されていない公開ウェブサイトからのプライベート ネットワーク アクセスがブロックされるようになりました。現在実施中のセキュアでないコンテキストからのプライベート ネットワーク アクセスの非推奨トライアルでは、影響を受けたウェブサイトを HTTPS に移行するうえでの課題が明らかになりました。一般的な懸念は、プライベート デバイスを HTTPS に移行する難しさで、混合コンテンツ チェック違反につながります。

前述の課題に対処するため、Chrome 120 の新しい権限プロンプトがオリジン トライアルで利用可能になりました

新しいオプションとしての権限プロンプト

新しい targetAddressSpace 属性を取得オプションとして追加すると、リクエストで混合コンテンツのチェックをスキップできるようになります。

例:

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

プライベート ネットワーク アクセス: プリフライトの導入では、プライベート ネットワーク リクエストの前にプリフライト リクエストがあります。このプリフライト リクエストには新しいヘッダー Access-Control-Request-Private-Network: true が含まれ、対応するレスポンスにはヘッダー Access-Control-Allow-Private-Network: true を含める必要があります。

新しい権限プロンプトに対応するために、Private-Network-Access-NamePrivate-Network-Access-ID という 2 つの新しいレスポンス ヘッダーを組み込むことをデバイスに求めました。

Private-Network-Access-Name: <some human-readable device name>
Private-Network-Access-ID: <the MAC address of the device>

例:

Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

Private-Network-Access-ID: 48 ビット値。コロンで区切られた 6 16 進バイトとして表されます。Private-Network-Access-Name: ECMAScript 正規表現 /^[a-z0-9_-.]+$/ に一致する文字列としての有効な名前。名前の最大長は UTF-8 コード単位 248 です。

デモ

デモは https://private-network-access-permission-test.glitch.me/ でご覧いただけます。

オリジン トライアルに登録する

プライベート ネットワーク アクセスの権限プロンプトにより、デベロッパーがプライベート ネットワーク アクセスに安全なコンテキスト制限を導入しやすくなるよう、Chrome のバージョン 120 ~ 122 でオリジン トライアルとしてこの機能を利用できるようにしました。

オリジン トライアルに登録して、ウェブサイトで権限プロンプトを使用できるようにします。

  1. 送信元のトークンをリクエストします。
  2. トークンは次のいずれかの方法で使用します。
    • HTML 内: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • JavaScript で次のようにします。 js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • HTTP ヘッダー: text Origin-Trial: TOKEN_GOES_HERE

この機能に関するフィードバックや提案については、GitHub リポジトリで問題を報告してください。

リソース