Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/actions/spelling/allow.txt
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ hackathon
hackathons
hqdefault
hughesthe
iana
iat
ietf
inbox
Expand Down
4 changes: 2 additions & 2 deletions docs/topics/streaming-and-async.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Security is paramount for push notifications due to their asynchronous and serve

- **Webhook URL Validation:** Servers SHOULD NOT blindly trust and send POST requests to any URL provided by a client. Malicious clients could provide URLs pointing to internal services or unrelated third-party systems, leading to Server-Side Request Forgery (SSRF) attacks or acting as Distributed Denial of Service (DDoS) amplifiers.
- **Mitigation strategies:** Allowlisting of trusted domains, ownership verification (for example, challenge-response mechanisms), and network controls (e.g., egress firewalls).
- **Authenticating to the Client's Webhook:** The A2A Server MUST authenticate itself to the client's webhook URL according to the scheme(s) specified in `PushNotificationConfig.authentication`. Common schemes include Bearer Tokens (OAuth 2.0), API keys, HMAC signatures, or mutual TLS (mTLS).
- **Authenticating to the Client's Webhook:** The A2A Server MUST authenticate itself to the client's webhook URL according to the scheme specified in `PushNotificationConfig.authentication`. Common schemes include Bearer Tokens (OAuth 2.0), API keys, HMAC signatures, or mutual TLS (mTLS).

#### Client Webhook Receiver Security (when receiving notifications from A2A server)

Expand All @@ -95,7 +95,7 @@ Security is paramount for push notifications due to their asynchronous and serve

#### Example Asymmetric Key Flow (JWT + JWKS)

1. Client sets `PushNotificationConfig` specifying `authentication.schemes: ["Bearer"]` and possibly an expected `issuer` or `audience` for the JWT.
1. Client sets `PushNotificationConfig` specifying `authentication.scheme: "Bearer"` and possibly an expected `issuer` or `audience` for the JWT.
2. A2A Server, when sending a notification:
- Generates a JWT, signing it with its private key. The JWT includes claims like `iss` (issuer), `aud` (audience), `iat` (issued at), `exp` (expires), `jti` (JWT ID), and `taskId`.
- The JWT header indicates the signing algorithm and key ID (`kid`).
Expand Down
9 changes: 5 additions & 4 deletions specification/grpc/a2a.proto
Original file line number Diff line number Diff line change
Expand Up @@ -374,17 +374,18 @@ message PushNotificationConfig {
string url = 2 [(google.api.field_behavior) = REQUIRED];
// Token unique for this task/session
string token = 3;
// Information about the authentication to sent with the notification
// Authentication information required to send the notification
AuthenticationInfo authentication = 4;
}
// --8<-- [end:PushNotificationConfig]

// --8<-- [start:PushNotificationAuthenticationInfo]
// Defines authentication details, used for push notifications.
message AuthenticationInfo {
// A list of supported authentication schemes (e.g., 'Basic', 'Bearer').
repeated string schemes = 1 [(google.api.field_behavior) = REQUIRED];
// Optional credentials
// HTTP Authentication Scheme from the [IANA registry](https://www.iana.org/assignments/http-authschemes/).
// Common values: `Bearer`, `Basic`, `Digest`. Scheme names are case-insensitive per [RFC 9110 Section 11.1](https://www.rfc-editor.org/rfc/rfc9110#section-11.1).
string scheme = 1 [(google.api.field_behavior) = REQUIRED];
// Push Notification credentials. Format depends on the scheme (e.g., token for Bearer).
string credentials = 2;
}
// --8<-- [end:PushNotificationAuthenticationInfo]
Expand Down
Loading