Internet Engineering Task Force (IETF)                        D. Gultsch
Request for Comments: 9749                                    March 2025
Category: Standards Track                                               
ISSN: 2070-1721
        
Use of Voluntary Application Server Identification (VAPID) in JSON Meta Application Protocol (JMAP) Web Push
JSONメタアプリケーションプロトコル(JMAP)Webプッシュでの自主アプリケーションサーバー識別(VAPID)の使用
Abstract
概要

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プッシュ通知を認証する機能を宣伝します。

Status of This Memo
本文書の位置付け

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ライセンステキストを含める必要があります。

Table of Contents
目次
   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
        
1. Introduction
1. はじめに

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.

JMAP [RFC8620]は、Web Push [RFC8030]と互換性のあるプロトコルを使用して、クライアントがイベントにサブスクライブする方法を指定します。一部のプッシュサービスでは、アプリケーションサーバーがVAPIDプロトコル[RFC8292]を使用してすべてのプッシュメッセージを認証する必要があります。それを容易にするために、クライアント(またはWebプッシュ用語のユーザーエージェント)は、新しいエンドポイントを取得するときにプッシュサービスに渡すために、アプリケーションサーバーのVapid公開キーを必要とします。

2. Conventions Used in This Document
2. このドキュメントで使用されている規則

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

このドキュメント内のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、「MAY」、および「OPTIONAL」は、ここに示すようにすべて大文字で表示されている場合にのみ、BCP 14 [RFC2119] [RFC8174] で説明されているように解釈されます。

3. Discovering Support for VAPID
3. Vapidのサポートを発見します

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エンコードと互換性があります)は、重要な比較を簡素化し、代替形式よりもコンパクトです。

4. Issuing Push Notifications
4. プッシュ通知の発行

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が作成された時点で機能オブジェクトに宣伝されたものである必要があります。

5. Key Rotation
5. キーローテーション

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.不一致がある場合、クライアントはプッシュサブスクリプションを作成することができます。さらに、クライアントは、以前の試みに失敗したプッシュサブスクリプションを破壊する場合があります。

6. Security Considerations
6. セキュリティに関する考慮事項

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.

urn:ietf:params:jmap:webpush-vapidプロパティのJMAP機能オブジェクトの包含は、VAPIDに対するサーバーのサポートに関する情報を提供することに限定されています。このプロパティは、機密情報を明らかにしておらず、JMAPやWebプッシュに固有のものを超えた新しいセキュリティまたはプライバシーのリスクを導入しません。JMAP [RFC8620](特にセクション8.6および8.7)、Web Push [RFC8030]、およびVAPID [RFC8292]のセキュリティ上の考慮事項は、このドキュメントに適用されます。

7. IANA Considerations
7. IANAの考慮事項
7.1. Registration of the JMAP Capability for VAPID
7.1. VAPIDのJMAP機能の登録

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

8. References
8. 参考文献
8.1. Normative References
8.1. 引用文献
   [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>.
        
8.2. Informative References
8.2. 参考引用
   [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/>.
        
Author's Address
著者の連絡先
   Daniel Gultsch
   Email: daniel@gultsch.de