Internet Engineering Task Force (IETF) D. Gultsch Request for Comments: 9749 March 2025 Category: Standards Track ISSN: 2070-1721
This document defines a method for JSON Meta Application Protocol (JMAP) servers to advertise their capability to authenticate Web Push notifications using the Voluntary Application Server Identification (VAPID) protocol.
このドキュメントは、JSON Meta Application Protocol(JMAP)サーバーのメソッドを定義して、自主アプリケーションサーバー識別(VAPID)プロトコルを使用してWebプッシュ通知を認証する機能を宣伝します。
This is an Internet Standards Track document.
これは、インターネット標準トラックドキュメントです。
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
このドキュメントは、インターネットエンジニアリングタスクフォース(IETF)の製品です。IETFコミュニティのコンセンサスを表しています。公開レビューを受けており、インターネットエンジニアリングステアリンググループ(IESG)からの出版が承認されています。インターネット標準の詳細については、RFC 7841のセクション2で入手できます。
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9749.
このドキュメントの現在のステータス、任意のERRATA、およびそのフィードバックを提供する方法に関する情報は、https://www.rfc-editor.org/info/rfc9749で取得できます。
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.
著作権(c)2025 IETF Trustおよび文書著者として特定された人。無断転載を禁じます。
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
このドキュメントは、BCP 78およびIETFドキュメント(https://trustee.ietf.org/license-info)に関連するIETF Trustの法的規定の対象となります。この文書に関するあなたの権利と制限を説明するので、これらの文書を注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、セクション4.Eで説明されている法的規定のセクション4.Eで説明されており、改訂されたBSDライセンスで説明されている保証なしで提供されるように、改訂されたBSDライセンステキストを含める必要があります。
1. Introduction 2. Conventions Used in This Document 3. Discovering Support for VAPID 4. Issuing Push Notifications 5. Key Rotation 6. Security Considerations 7. IANA Considerations 7.1. Registration of the JMAP Capability for VAPID 8. References 8.1. Normative References 8.2. Informative References Author's Address
JMAP [RFC8620] specifies how clients can subscribe to events using a protocol that is compatible with Web Push [RFC8030]. Some push services require that the application server authenticate all push messages using the VAPID protocol [RFC8292]. To facilitate that, the client (or user agent in Web Push terminology) needs the VAPID public key of the application server to pass along to the push service when retrieving a new endpoint.
The JMAP capabilities object is returned as part of the standard JMAP session object (see Section 2 of [RFC8620]). Servers supporting this specification MUST add a property called urn:ietf:params:jmap:webpush-vapid to the capabilities object. The value of this property is an object that MUST contain the following information:
JMAP機能オブジェクトは、標準のJMAPセッションオブジェクトの一部として返されます([RFC8620]のセクション2を参照)。この仕様をサポートするサーバーは、urn:ietf:params:jmap:webpush-vapidというurn:ietf:paramsというプロパティを追加する必要があります。このプロパティの値は、次の情報を含める必要があるオブジェクトです。
applicationServerKey: "String"
ApplicationSerKey:「文字列」
The Elliptic Curve Digital Signature Algorithm (ECDSA) public key that the push service will use to authenticate the application server, in its uncompressed form (as described in Section 2.3.3 of [SEC1]) and encoded using base64url encoding [RFC7515]. Current systems use the P-256 curve [FIPS186].
Elliptic Curve Digital Signature Algorithm(ECDSA)プッシュサービスがアプリケーションサーバーを認証するために使用する公開キー([SEC1]のセクション2.3.3で説明されている)で、[RFC7515]を使用してEncodedをエンコードします。現在のシステムは、P-256曲線[FIPS186]を使用しています。
Informative Note: The format of the application server key was chosen to ensure compatibility with the browser API (Section 7.2 of [PUSH-API]), allowing the key to be directly copied and used without additional transformation. Additionally, as noted in Section 3.2 of [RFC8292], the X9.62 encoding (which is compatible with SEC1 encoding) simplifies key comparisons and is more compact than alternative formats.
有益なメモ:アプリケーションサーバーキーの形式が選択され、ブラウザAPI([プッシュAPI]のセクション7.2)との互換性を確保し、キーを追加の変換なしで直接コピーして使用できます。さらに、[RFC8292]のセクション3.2に記載されているように、X9.62エンコーディング(SEC1エンコードと互換性があります)は、重要な比較を簡素化し、代替形式よりもコンパクトです。
Every time the server sends a push message to a PushSubscription URL, it MUST authenticate the POST request using the protocol outlined in [RFC8292]. This includes both StateChange events and PushVerification notifications. To authenticate the request, the server MUST use a JSON Web Token (JWT) signed by the private key corresponding to the application server key. This application server key MUST be the one that was advertised in the capabilities object at the time the PushSubscription was created.
サーバーがプッシュメッセージをPushSubscription URLに送信するたびに、[RFC8292]で概説されているプロトコルを使用してPOSTリクエストを認証する必要があります。これには、ステータチェンジイベントとプッシュヴェリフィケーション通知の両方が含まれます。リクエストを認証するには、サーバーは、アプリケーションサーバーキーに対応する秘密キーによって署名されたJSON Webトークン(JWT)を使用する必要があります。このアプリケーションサーバーキーは、PushSubscriptionが作成された時点で機能オブジェクトに宣伝されたものである必要があります。
When a server needs to replace its VAPID key, it MUST update the sessionState per [RFC8620]. The client MUST monitor the JMAP session object for changes to the VAPID key and MUST recreate its push subscription when it detects such a change.
サーバーがVAPIDキーを置き換える必要がある場合、[RFC8620]ごとにセッションステートを更新する必要があります。クライアントは、vapidキーの変更についてJMAPセッションオブジェクトを監視する必要があり、そのような変更を検出したときにプッシュサブスクリプションを再現する必要があります。
After key rotation, the server MAY continue to send push notifications for existing push subscriptions using the old application server key for a transitional period. This allows clients time to recreate their respective push subscriptions. At the end of the transitional period (or immediately for implementations that do not have one), the server MUST destroy push subscriptions that use the old key.
キーローテーションの後、サーバーは、移行期間の古いアプリケーションサーバーキーを使用して、既存のプッシュサブスクリプションのプッシュ通知を引き続き送信する場合があります。これにより、クライアントはそれぞれのプッシュサブスクリプションを再作成することができます。遷移期間の終わりに(または、1つを持っていない実装のために直ちに)、サーバーは古いキーを使用するプッシュサブスクリプションを破壊する必要があります。
When destroying push subscriptions that include the data type PushSubscription, the server MAY issue one final StateChange push notification using the old URL and application server key to notify the client of changes to the PushSubscription data type. This prompts the client to make a PushSubscription/changes method call. The response to this call will contain an updated sessionState, which refers to a session object that contains the new VAPID key.
データ型PushSubscriptionを含むプッシュサブスクリプションを破壊すると、サーバーは、古いURLおよびアプリケーションサーバーキーを使用して、1つの最後のステータスチェンジプッシュ通知を発行して、クライアントにPushSubscriptionデータ型の変更を通知する場合があります。これにより、クライアントはプッシュサブスクリプション/変更メソッド呼び出しを行うように促します。この呼び出しへの応答には、更新されたセッションステートが含まれます。これには、新しいVapidキーを含むセッションオブジェクトを指します。
A race condition can occur when the server updates its VAPID key after the client has refreshed the session object but before calling the PushSubscription/set method. This situation causes the server to send a PushVerification object to a push resource URL that is now associated with an outdated VAPID key. Consequently, the push service will reject the PushVerification with a 403 (Forbidden) status code, as specified in Section 4.2 of [RFC8292].
クライアントがセッションオブジェクトを更新した後、プッシュサブスクリプション/セットメソッドを呼び出す前に、サーバーがVAPIDキーを更新すると、レース条件が発生する可能性があります。この状況により、サーバーはプッシュヴァピッドキーに関連付けられているプッシュリソースURLにプッシュヴェリシーオブジェクトを送信します。したがって、プッシュサービスは、[RFC8292]のセクション4.2で指定されているように、403(禁止)ステータスコードで押し込みを拒否します。
To alleviate this problem, the client MUST check if the sessionState in the response from the PushSubscription/set method points to a session object with an applicationServerKey that matches their expectations. If there is a mismatch, the client MAY retry creating the PushSubscription. Additionally, the client MAY destroy the PushSubscription from the earlier, failed attempt.
To alleviate this problem, the client MUST check if the sessionState in the response from the PushSubscription/set method points to a session object with an applicationServerKey that matches their expectations.不一致がある場合、クライアントはプッシュサブスクリプションを作成することができます。さらに、クライアントは、以前の試みに失敗したプッシュサブスクリプションを破壊する場合があります。
During the key rotation process, synchronization issues between the client and server may arise. Specifically, a client might restrict a push subscription with the push service to an outdated key, while the server sends the PushVerification object authenticated with the newly rotated key. This mismatch leads to the push service rejecting the PushVerification request with a 403 (Forbidden) status code, as specified in Section 4.2 of [RFC8292].
主要な回転プロセス中に、クライアントとサーバー間の同期の問題が発生する可能性があります。具体的には、クライアントはプッシュサービスを使用してプッシュサブスクリプションを時代遅れのキーに制限する場合がありますが、サーバーは新しく回転したキーで認証されたプッシュヴェリシーオブジェクトを送信します。このミスマッチは、[RFC8292]のセクション4.2で指定されているように、403(禁止)ステータスコードでプッシュサービスを拒否するプッシュサービスにつながります。
Per the requirements of Section 7.2 of [RFC8620], the server MUST NOT retry the rejected PushVerification request. Consequently, the PushVerification object will not be delivered to the client.
[RFC8620]のセクション7.2の要件に従って、サーバーは拒否されたプッシュヴェリシーリクエストを再試行してはなりません。したがって、プッシュヴェリシーオブジェクトはクライアントに配信されません。
To mitigate such issues, the client is responsible for detecting and resolving any synchronization discrepancies, as outlined in Section 5 of this document.
このような問題を軽減するために、クライアントは、このドキュメントのセクション5で概説されているように、同期の不一致を検出および解決する責任があります。
The inclusion of the urn:ietf:params:jmap:webpush-vapid property in the JMAP capabilities object is limited to providing information about the server's support for VAPID. This property does not reveal sensitive information, nor does it introduce new security or privacy risks beyond those inherent to JMAP and Web Push. The security considerations for JMAP [RFC8620] (especially Sections 8.6 and 8.7), Web Push [RFC8030], and VAPID [RFC8292] apply to this document.
IANA has registered the following new capability in the "JMAP Capabilities" registry:
IANAは、「JMAP機能」レジストリに次の新しい機能を登録しています。
Capability Name:
機能名:
urn:ietf:params:jmap:webpush-vapid
urn:ietf:params:jmap:webpush-vapid
Intended Use:
使用目的:
common
一般
Change Controller:
Change Controller:
IETF
IETF
Security and Privacy Considerations:
セキュリティとプライバシーの考慮事項:
RFC 9749, Section 6
RFC 9749、セクション6
Reference:
参照:
RFC 9749
RFC 9749
[FIPS186] NIST, "Digital Signature Standard (DSS)", NIST FIPS 186-5, DOI 10.6028/NIST.FIPS.186-5, February 2023, <https://doi.org/10.6028/NIST.FIPS.186-5>.
[SEC1] Standards for Efficient Cryptography Group, "SEC 1: Elliptic Curve Cryptography", Version 2.0, May 2009, <http://www.secg.org/sec1-v2.pdf>.
[RFC8620] Jenkins, N. and C. Newman, "The JSON Meta Application Protocol (JMAP)", RFC 8620, DOI 10.17487/RFC8620, July 2019, <https://www.rfc-editor.org/info/rfc8620>.
[RFC8030] Thomson, M., Damaggio, E., and B. Raymor, Ed., "Generic Event Delivery Using HTTP Push", RFC 8030, DOI 10.17487/RFC8030, December 2016, <https://www.rfc-editor.org/info/rfc8030>.
[RFC8292] Thomson, M. and P. Beverloo, "Voluntary Application Server Identification (VAPID) for Web Push", RFC 8292, DOI 10.17487/RFC8292, November 2017, <https://www.rfc-editor.org/info/rfc8292>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015, <https://www.rfc-editor.org/info/rfc7515>.
[PUSH-API] Beverloo, P., Ed., Thomson, M., Ed., and M. Caceres, Ed., "Push API", W3C Working Draft, September 2024, <https://www.w3.org/TR/push-api/>.
Daniel Gultsch Email: daniel@gultsch.de