@@ -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}
650651SSF 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+
960966TODO : consider adding a IANA Registry for stream configuration metadata, similar
961967to Section 7.1.1 of {{RFC8414}}. This would allow other specs to add to
962968the 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
986994If the request does not contain the `delivery` property, then the Transmitter
987995MUST 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
13531421in the PUT body, not only the ones that are specifically intended to be changed.
13541422Missing Receiver-Supplied properties MUST be interpreted as requested to be
13551423deleted. 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`
13571425property is included in the request, it SHOULD NOT be an empty array.
13581426
13591427Transmitter-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+
18291921As with any SSF event, the Verification Event has a top-level `sub_id` claim :
18301922
18311923sub_id
@@ -1956,7 +2048,7 @@ reason
19562048
19572049> OPTIONAL. Provides a short description of why the Transmitter has updated the
19582050 status.
1959-
2051+
19602052As with any SSF Event, this event has a top-level `sub_id` claim :
19612053
19622054sub_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
20362128from the stream, and MUST NOT report these events as errors to the Event
20372129Transmitter.
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
21722273in 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
21762277uniquely identify the Receiver to the Transmitter MAY be used, if the two parties
21772278have 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