Skip to content

Commit 7f564b0

Browse files
committed
Added optional receiver_key to enable encryption of SETs
1 parent 9a922a7 commit 7f564b0

File tree

1 file changed

+115
-15
lines changed

1 file changed

+115
-15
lines changed

openid-sharedsignals-framework-1_0.md

Lines changed: 115 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ normative:
134134
RFC7159:
135135
RFC7517:
136136
RFC7519:
137+
RFC7591:
137138
RFC8174:
138139
RFC8414:
139140
RFC8417:
@@ -574,7 +575,7 @@ spec_version
574575

575576
> OPTIONAL. A version idenitfying the implementer's draft or final specification implemented by the Transmitter. This includes the numerical portion of the spec version as described in the document {{NAMINGCONVENTION}}. If absent, the Transmitter is assumed to conform to "1_0-ID1" version of the specification (this document).
576577

577-
> The following is a non-normative example of Transmitter that implements the second implementer's draft of the Shared Signals Framework specification 1_0.
578+
> The following is a non-normative example of Transmitter that implements the second implementer's draft of the Shared Signals Framework specification 1_0.
578579

579580
~~~ json
580581
{
@@ -649,7 +650,7 @@ TODO: consider adding a IANA Registry for metadata, similar to Section 7.1.1 of
649650
### Authorization scheme {#authorization-scheme}
650651
SSF is an HTTP based signals sharing framework and is agnostic to the authentication and authorization schemes used to secure stream configuration APIs. It does not provide any SSF-specific authentication and authorization schemes but relies on the cooperating parties' mutual security considerations. The authorization scheme section of the metadata provides discovery information related to the Transmitter's stream management APIs.
651652

652-
spec_urn
653+
spec_urn
653654

654655
> REQUIRED. A URN that describes the specification of the protocol being used.
655656

@@ -957,6 +958,11 @@ description
957958
This is useful in multi stream systems to identify the stream for human actors. The
958959
transmitter may truncate the string beyond allowed max length.
959960

961+
receiver_key
962+
963+
> **Receiver-Supplied**, An optional JSON Web Key (JWK) that can be used to encrypt
964+
events sent from the Transmitter to the Receiver.
965+
960966
TODO: consider adding a IANA Registry for stream configuration metadata, similar
961967
to Section 7.1.1 of {{RFC8414}}. This would allow other specs to add to
962968
the stream configuration.
@@ -982,6 +988,8 @@ Configuration ({{stream-config}}) object:
982988
* `events_requested`
983989
* `delivery` : Note that in the case of the POLL method, the `endpoint_url` value is
984990
supplied by the Transmitter.
991+
* `description`
992+
* `receiver_key`
985993

986994
If the request does not contain the `delivery` property, then the Transmitter
987995
MUST assume that the `method` is "urn:ietf:rfc:8936" (poll). The
@@ -1005,7 +1013,19 @@ Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
10051013
"urn:example:secevent:events:type_3",
10061014
"urn:example:secevent:events:type_4"
10071015
],
1008-
"description" : "Stream for Receiver A using events type_2, type_3, type_4"
1016+
"description": "Stream for Receiver A using events type_2, type_3, type_4",
1017+
"receiver_key": {
1018+
"jwk": [
1019+
{
1020+
"alg": "EC",
1021+
"crv": "P-256",
1022+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1023+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1024+
"use": "enc",
1025+
"kid": "1"
1026+
}
1027+
]
1028+
}
10091029
}
10101030
~~~
10111031
{: #figcreatestreamreq title="Example: Create Event Stream Request"}
@@ -1041,7 +1061,19 @@ Content-Type: application/json
10411061
"urn:example:secevent:events:type_2",
10421062
"urn:example:secevent:events:type_3"
10431063
],
1044-
"description" : "Stream for Receiver A using events type_2, type_3, type_4"
1064+
"description" : "Stream for Receiver A using events type_2, type_3, type_4",
1065+
"receiver_key": {
1066+
"jwk": [
1067+
{
1068+
"alg": "EC",
1069+
"crv": "P-256",
1070+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1071+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1072+
"use": "enc",
1073+
"kid": "1"
1074+
}
1075+
]
1076+
}
10451077
}
10461078
~~~
10471079
{: #figcreatestreamresp title="Example: Create Stream Response"}
@@ -1112,7 +1144,19 @@ Cache-Control: no-store
11121144
"urn:example:secevent:events:type_2",
11131145
"urn:example:secevent:events:type_3"
11141146
],
1115-
"description" : "Stream for Receiver A using events type_2, type_3, type_4"
1147+
"description" : "Stream for Receiver A using events type_2, type_3, type_4",
1148+
"receiver_key": {
1149+
"jwk": [
1150+
{
1151+
"alg": "EC",
1152+
"crv": "P-256",
1153+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1154+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1155+
"use": "enc",
1156+
"kid": "1"
1157+
}
1158+
]
1159+
}
11161160
}
11171161
~~~
11181162
{: title="Example: Read Stream Configuration Response" #figreadconfigresp}
@@ -1288,7 +1332,19 @@ Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
12881332
"urn:example:secevent:events:type_3",
12891333
"urn:example:secevent:events:type_4"
12901334
],
1291-
"description" : "Stream for Receiver B using events type_2, type_3, type_4"
1335+
"description" : "Stream for Receiver B using events type_2, type_3, type_4",
1336+
"receiver_key": {
1337+
"jwk": [
1338+
{
1339+
"alg": "EC",
1340+
"crv": "P-256",
1341+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1342+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1343+
"use": "enc",
1344+
"kid": "1"
1345+
}
1346+
]
1347+
}
12921348
}
12931349
~~~
12941350
{: title="Example: Update Stream Configuration Request" #figupdateconfigreq}
@@ -1325,7 +1381,19 @@ Cache-Control: no-store
13251381
"urn:example:secevent:events:type_2",
13261382
"urn:example:secevent:events:type_3"
13271383
],
1328-
"description" : "Stream for Receiver B using events type_2, type_3, type_4"
1384+
"description" : "Stream for Receiver B using events type_2, type_3, type_4",
1385+
"receiver_key": {
1386+
"jwk": [
1387+
{
1388+
"alg": "EC",
1389+
"crv": "P-256",
1390+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1391+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1392+
"use": "enc",
1393+
"kid": "1"
1394+
}
1395+
]
1396+
}
13291397
}
13301398
~~~
13311399
{: title="Example: Update Stream Configuration Response" #figupdateconfigresp}
@@ -1353,7 +1421,7 @@ The stream_id and the full set of Receiver-Supplied properties MUST be present
13531421
in the PUT body, not only the ones that are specifically intended to be changed.
13541422
Missing Receiver-Supplied properties MUST be interpreted as requested to be
13551423
deleted. Event Receivers MAY read the configuration first, modify the JSON
1356-
{{RFC7159}} representation, then make a replacement request. If `events_requested`
1424+
{{RFC7159}} representation, then make a replacement request. If `events_requested`
13571425
property is included in the request, it SHOULD NOT be an empty array.
13581426

13591427
Transmitter-Supplied properties besides the stream_id MAY be present,
@@ -1385,7 +1453,19 @@ Authorization: Bearer eyJ0b2tlbiI6ImV4YW1wbGUifQo=
13851453
"urn:example:secevent:events:type_3",
13861454
"urn:example:secevent:events:type_4"
13871455
],
1388-
"description" : "Stream for Receiver C"
1456+
"description" : "Stream for Receiver C",
1457+
"receiver_key": {
1458+
"jwk": [
1459+
{
1460+
"alg": "EC",
1461+
"crv": "P-256",
1462+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1463+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1464+
"use": "enc",
1465+
"kid": "1"
1466+
}
1467+
]
1468+
}
13891469
}
13901470
~~~
13911471
{: title="Example: Replace Stream Configuration Request" #figreplaceconfigreq}
@@ -1422,7 +1502,19 @@ Cache-Control: no-store
14221502
"urn:example:secevent:events:type_2",
14231503
"urn:example:secevent:events:type_3"
14241504
],
1425-
"description" : "Stream for Receiver C"
1505+
"description" : "Stream for Receiver C",
1506+
"receiver_key": {
1507+
"jwk": [
1508+
{
1509+
"alg": "EC",
1510+
"crv": "P-256",
1511+
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1512+
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
1513+
"use": "enc",
1514+
"kid": "1"
1515+
}
1516+
]
1517+
}
14261518
}
14271519
~~~
14281520
{: title="Example: Replace Stream Configuration Response" #figreplaceconfigresp}
@@ -1825,7 +1917,7 @@ state
18251917

18261918
> OPTIONAL An opaque value provided by the Event Receiver when the event is
18271919
triggered.
1828-
1920+
18291921
As with any SSF event, the Verification Event has a top-level `sub_id` claim:
18301922

18311923
sub_id
@@ -1956,7 +2048,7 @@ reason
19562048

19572049
> OPTIONAL. Provides a short description of why the Transmitter has updated the
19582050
status.
1959-
2051+
19602052
As with any SSF Event, this event has a top-level `sub_id` claim:
19612053

19622054
sub_id
@@ -1977,7 +2069,7 @@ sub_id
19772069
"sub_id": {
19782070
"format": "opaque",
19792071
"id" : "f67e39a0a4d34d56b3aa1bc4cff0069f"
1980-
},
2072+
},
19812073
"events": {
19822074
"https://schemas.openid.net/secevent/ssf/event-type/stream-updated": {
19832075
"status": "paused",
@@ -2036,6 +2128,15 @@ Receivers MUST tolerate receiving events for subjects that have been removed
20362128
from the stream, and MUST NOT report these events as errors to the Event
20372129
Transmitter.
20382130

2131+
## Encrypting SETs {#management-sec-encrypting-sets}
2132+
If an Event Transmitter is sending events that contain Personally Identifiable Information
2133+
(PII), whether in the body of the event or in the `sub_id` of the SET itself, then the
2134+
Transmitter MUST encrypt the SET such that it is sending a JWE instead of a JWT, as
2135+
required by the Security Event Token (SET) {{RFC8417}} spec. In order to encrypt a SET,
2136+
the Receiver MUST share a public key with the Transmitter. This information MAY be shared
2137+
via the stream creation and update APIs described above. Alternatively, it MAY be
2138+
shared out-of-band when the Transmitter-Receiver relationship is first established via
2139+
Dynamic Client Registration {{RFC7591}} or any other configuration method.
20392140

20402141
# Privacy Considerations {#privacy-considerations}
20412142

@@ -2172,7 +2273,7 @@ The purpose is defense in depth against confusion with other JWTs, as described
21722273
in Sections 4.5 and 4.6 of {{RFC8417}}.
21732274

21742275
### The "aud" Claim {#aud-claim}
2175-
The "aud" claim can be a single string or an array of strings. Values that
2276+
The "aud" claim can be a single string or an array of strings. Values that
21762277
uniquely identify the Receiver to the Transmitter MAY be used, if the two parties
21772278
have agreement on the format.
21782279

@@ -2320,4 +2421,3 @@ The technology described in this specification was made available from contribut
23202421
* Fix issue #18 by converting saml-assertion-id to saml_assertion_id to maintain consistent formatting with other subject identifiers (#1)
23212422
* updated backward compatibility language
23222423
* added section for Transmitter Configuration Metadata RISC compatibility
2323-

0 commit comments

Comments
 (0)