2024/09/24 追記
現在は「The Concealed HTTP Authentication Scheme」という仕様名になっています。
==
『HTTP Unprompted Authentication』という提案仕様がGoogleのDavid Schinazi氏らによって提出されている。
この仕様は、WebサーバにおいてHTTP認証を行っている事を秘匿するための仕様です。これによりWebサーバ上に管理者向けエンドポイントや、VPNサービスなどが動いてることを隠すことができます。
そのために必要なこととして、もちろん通信の暗号化も必要ですが、さらに正規ユーザでない第三者が認証用エンドポイントにリクエストしても「401 Authorization Required」で応答しないという要件があります。「401 Authorization Required」を返さないため、認証に使うNonceを別途共有する必要が出てきます。
『HTTP Unprompted Authentication』はそのための仕組みを提供します。
Nonceの生成
この仕様では通信はTLSもしくはQUICを利用している事を前提としています。
Nonceの生成には、『RFC 5705 Keying Material Exporters for TLS』を利用しセッションに固有な秘密値を得ます。これをNonceとして利用します。
なお、ラベルには認証方式にあわせて次のどちらかを使用します
- EXPORTER-HTTP-Unprompted-Authentication-Signature
- EXPORTER-HTTP-Unprompted-Authentication-HMAC
認証用ヘッダ
認証用ヘッダとして新しくUnprompted-Authenticationヘッダを定義します。
Signatureで認証する場合の例
Unprompted-Authentication: Signature k=:YmFzZW1lbnQ=:;s=7; p=:SW5zZXJ0IHNpZ25hdHVyZSBvZiBub25jZSBoZXJlIHdo aWNoIHRha2VzIDUxMiBiaXRzIGZvciBFZDI1NTE5IQ==:
HMACで認証する場合の例
Unprompted-Authentication: HMAC k="YmFzZW1lbnQ=";h=6; p="SW5zZXJ0IEhNQUMgb2Ygbm9uY2UgaGVyZSB3aGljaCB0YWtl cyA1MTIgYml0cyBmb3IgU0hBLTUxMiEhISEhIQ=="
それぞれヘッダのパラメータの意味は次のとおりです
動作
クライアントは、そこに認証用エンドポイントがあるという知識を持って認証用エンドポイントにアクセスします。そのときにUnprompted-Authenticationを送信することで認証を試みます。
サーバは、送られてきたUnprompted-Authenticationヘッダを持ってユーザを認証します。認証が通れば200を返すことになります。それ以外の場合は、認証エンドポイントを秘匿するために404で応答します。