Skip to content

Commit 74bccd3

Browse files
author
Daniel Rubery
committed
Remove Sec- prefixes
This is meaningless on the response headers, and on the Sec-Session-Response, the server needs to carefully validate that the expected key is being used anyway. It does seem kind of nice if the server can trust that the Sec-Session-Id is truly coming from the site instead of an XHR, so that it can look up the right expected public key for the Sec-Session-Response, so we leave the Sec- prefix on that one header. Following the discussion on #59, we make the shared prefix Secure-Session- instead.
1 parent 9d59f59 commit 74bccd3

File tree

1 file changed

+62
-62
lines changed

1 file changed

+62
-62
lines changed

spec.bs

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ In order to use DBSC, site owners need to establish two new endpoints:
190190
the registration endpoint and the refresh endpoint.
191191

192192
The registration endpoint is contacted asynchronously after the browser receives
193-
the Sec-Session-Registration header. This endpoint should:
193+
the Secure-Session-Registration header. This endpoint should:
194194
- Serve the session config, including a new session id.
195195
- Persist and associate the request's public key with the session id.
196196

@@ -201,7 +201,7 @@ cause browser agents to begin denial-of-service prevention mechanisms, or even
201201
terminate the session. Both could lead to future requests without bound
202202
cookies. The expected behavior of this endpoint is:
203203
- Look up the public key and recent challenges for the session by id.
204-
- Validate the Sec-Session-Response header has signed a recent challenge with
204+
- Validate the Secure-Session-Response header has signed a recent challenge with
205205
the correct key. Note that due to network latency and race conditions, it's
206206
possible to receive a signature for an old challenge after issuing a new
207207
challenge.
@@ -419,7 +419,7 @@ The <dfn>session credential</dfn> is a [=struct=] with the following
419419
Given a [=response=] (|response|), this algorithm updates the [=device bound
420420
session/cached challenge=] for a [=device bound session=].
421421

422-
1. Let |header name| be "<code>Sec-Session-Challenge</code>".
422+
1. Let |header name| be "<code>Secure-Session-Challenge</code>".
423423
1. Let |challenge list| be the result of executing <a>get a structured
424424
field value</a> given |header name| and "list" from |response|’s
425425
[=response/header list=].
@@ -464,7 +464,7 @@ The <dfn>session credential</dfn> is a [=struct=] with the following
464464
1. Set |request|'s [=request/URL=] to |destination|.
465465
1. Set |request|'s [=request/header list=] to « ».
466466
1. If |signed challenge| is non-null, [=header list/append=] the header
467-
("Sec-Session-Response", |signed challenge|) to |request|'s
467+
("Secure-Session-Response", |signed challenge|) to |request|'s
468468
[=request/header list=].
469469
1. If |authorization| is non-null, [=header list/append=] the header
470470
("Authorization", |authorization|) to |request|'s [=request/header list=].
@@ -545,7 +545,7 @@ The <dfn>session credential</dfn> is a [=struct=] with the following
545545
<div class="algorithm" data-algorithm="process-registration">
546546
To <dfn export id="create-session">create a new session</dfn> due to the
547547
[=response=] (|response|) to a [=request=] (|request|), do the following steps:
548-
1. Let |header name| be "<code>Sec-Session-Registration</code>".
548+
1. Let |header name| be "<code>Secure-Session-Registration</code>".
549549
1. Let |registration list| be the result of executing <a>get a structured
550550
field value</a> given |header name| and "list" from |response|’s
551551
[=response/header list=].
@@ -557,7 +557,7 @@ To <dfn export id="create-session">create a new session</dfn> due to the
557557
1. [=list/For each=] |algorithm| → |registration entry|
558558
1. If |algorithm| is not an <a>sf-token</a>, [=iteration/continue=].
559559
1. If |algorithm| represents a crypto algorithm supported in
560-
[:Sec-Session-Registration:], and is supported on this client, add
560+
[:Secure-Session-Registration:], and is supported on this client, add
561561
|algorithm| to |algorithm list|
562562
1. If |algorithm list| is empty, [=iteration/continue=].
563563
1. If |params|["path"] does not exist, or is not of type <a>sf-string</a>,
@@ -595,16 +595,16 @@ id="add-debug-header">add the debug header</dfn> to a [=request=]
595595
</div>
596596

597597
# DBSC Formats # {#format}
598-
## \``Sec-Session-Registration`\` HTTP header field ## {#header-sec-session-registration}
599-
The \`<dfn export http-header id="sec-session-registration-header">
600-
<code>Sec-Session-Registration</code></dfn>\` header field can be used in a
598+
## \``Secure-Session-Registration`\` HTTP header field ## {#header-secure-session-registration}
599+
The \`<dfn export http-header id="secure-session-registration-header">
600+
<code>Secure-Session-Registration</code></dfn>\` header field can be used in a
601601
[=response=] by the server to start a new [=/device bound session=] on the
602602
client.
603603

604-
[:Sec-Session-Registration:] is a List Structured Header [[RFC9651]]. Its ABNF
604+
[:Secure-Session-Registration:] is a List Structured Header [[RFC9651]]. Its ABNF
605605
is:
606606

607-
<pre class="abnf">Sec-Session-Registration = <a>sf-list</a></pre>
607+
<pre class="abnf">Secure-Session-Registration = <a>sf-list</a></pre>
608608

609609
Each item in the list must be an inner list, and each item in the inner list
610610
MUST be an <a>sf-token</a> representing a supported algorithm (ES256, RS256).
@@ -622,46 +622,46 @@ The following <a>sf-parameter</a>s are defined:
622622
<a>sf-string</a>. This <a>sf-parameter</a> will be copied into the
623623
registration JWT.
624624

625-
<div class="example" id="sec-session-registration-example">
626-
Some examples of [:Sec-Session-Registration:] from
625+
<div class="example" id="secure-session-registration-example">
626+
Some examples of [:Secure-Session-Registration:] from
627627
https://example.com/login.html:
628628

629629
```html
630630
HTTP/1.1 200 OK
631-
Sec-Session-Registration: (ES256);path="reg";challenge="cv";authorization="ac"
631+
Secure-Session-Registration: (ES256);path="reg";challenge="cv";authorization="ac"
632632
```
633633
```html
634634
HTTP/1.1 200 OK
635-
Sec-Session-Registration: (ES256 RS256);path="reg";challenge="cv"
635+
Secure-Session-Registration: (ES256 RS256);path="reg";challenge="cv"
636636
```
637637
```html
638638
HTTP/1.1 200 OK
639-
Sec-Session-Registration: (ES256);path="reg1";challenge="cv1";authorization="a"
640-
Sec-Session-Registration: (RS256);path="reg2";challenge="cv2";authorization="b"
639+
Secure-Session-Registration: (ES256);path="reg1";challenge="cv1";authorization="a"
640+
Secure-Session-Registration: (RS256);path="reg2";challenge="cv2";authorization="b"
641641
```
642642
```html
643643
HTTP/1.1 200 OK
644-
Sec-Session-Registration: (ES256);path="reg1";challenge="cv1";authorization="a", (RS256);path="reg2";challenge="cv2";authorization="b"
644+
Secure-Session-Registration: (ES256);path="reg1";challenge="cv1";authorization="a", (RS256);path="reg2";challenge="cv2";authorization="b"
645645
```
646646
</div>
647647

648-
## \``Sec-Session-Challenge`\` HTTP Header Field ## {#header-sec-session-challenge}
649-
The \`<dfn export http-header id="sec-session-challenge-header">
650-
<code>Sec-Session-Challenge</code></dfn>\` header field can be used in a
648+
## \``Secure-Session-Challenge`\` HTTP Header Field ## {#header-secure-session-challenge}
649+
The \`<dfn export http-header id="secure-session-challenge-header">
650+
<code>Secure-Session-Challenge</code></dfn>\` header field can be used in a
651651
[=response=] by the server to send a challenge to the client that it expects to
652-
be used in future Sec-Session-Response headers inside the [=DBSC proof=], or to
652+
be used in future Secure-Session-Response headers inside the [=DBSC proof=], or to
653653
request a newly signed [=DBSC proof=] right away if the [=response/status=]
654654
is 403.
655655

656-
[:Sec-Session-Challenge:] is a structured header. Its value must be a string.
656+
[:Secure-Session-Challenge:] is a structured header. Its value must be a string.
657657
Its ABNF is: <pre class="abnf">SecSessionChallenge = <a>sf-string</a></pre>
658658
The semantics of the item are defined in
659659
[[#challenge-structured-header-serialization]].
660660

661661
The processing steps are defined in [[#algo-process-challenge]].
662662

663-
### Sec-Session-Challenge structured header serialization ### {#challenge-structured-header-serialization}
664-
The [:Sec-Session-Challenge:] is represented as a Structured Field.[[!RFC9651]]
663+
### Secure-Session-Challenge structured header serialization ### {#challenge-structured-header-serialization}
664+
The [:Secure-Session-Challenge:] is represented as a Structured Field.[[!RFC9651]]
665665

666666
In this representation, a challenge is represented by a string.
667667

@@ -673,68 +673,68 @@ Note: The server might need to use this header to request the [=DBSC proof=] to
673673
be signed with a new challenge before a session id has been assigned. In this
674674
case the session ID is optional.
675675

676-
<div class="example" id="sec-session-challenge-example">
677-
Some examples of [:Sec-Session-Challenge:] from
676+
<div class="example" id="secure-session-challenge-example">
677+
Some examples of [:Secure-Session-Challenge:] from
678678
https://example.com/login.html:
679679

680680
```html
681681
HTTP/1.1 403 Forbidden
682-
Sec-Session-Challenge: "new challenge"
682+
Secure-Session-Challenge: "new challenge"
683683
```
684684
```html
685685
HTTP/1.1 403 Forbidden
686-
Sec-Session-Challenge: "new challenge";id="my session"
686+
Secure-Session-Challenge: "new challenge";id="my session"
687687
```
688688
```html
689689
HTTP/1.1 200 OK
690-
Sec-Session-Challenge: "new challenge";id="my session"
690+
Secure-Session-Challenge: "new challenge";id="my session"
691691
```
692692
```html
693693
HTTP/1.1 200 OK
694-
Sec-Session-Challenge: "new challenge";id="my session 1"
695-
Sec-Session-Challenge: "another challenge";id="my session 2"
694+
Secure-Session-Challenge: "new challenge";id="my session 1"
695+
Secure-Session-Challenge: "another challenge";id="my session 2"
696696
```
697697
```html
698698
HTTP/1.1 200 OK
699-
Sec-Session-Challenge: "c1";id="session 1", "c2";id="session 2"
699+
Secure-Session-Challenge: "c1";id="session 1", "c2";id="session 2"
700700
```
701701
</div>
702702

703-
## `Sec-Session-Response` HTTP Header Field ## {#header-sec-session-response}
704-
The \`<dfn export http-header id="sec-session-response-header">
705-
<code>Sec-Session-Response</code></dfn>\` header field can be used in the
703+
## `Secure-Session-Response` HTTP Header Field ## {#header-secure-session-response}
704+
The \`<dfn export http-header id="secure-session-response-header">
705+
<code>Secure-Session-Response</code></dfn>\` header field can be used in the
706706
[=request=] by the user agent to send a [=DBSC proof=] to the server to prove
707707
that the client is still in possession of the private key of the session key.
708708

709-
\`<a http-header><code>Sec-Session-Response</code></a>\` is a structured
709+
\`<a http-header><code>Secure-Session-Response</code></a>\` is a structured
710710
header. Its value must be a string. It's ABNF is:
711711
<pre class="abnf">SecSessionChallenge = <a>sf-string</a></pre>
712712
This string MUST only contain the [=DBSC proof=] JWT. Any <a>sf-parameter</a>s SHOULD be
713713
ignored.
714714

715-
<div class="example" id="sec-session-response-example">
715+
<div class="example" id="secure-session-response-example">
716716
```html
717717
POST example.com/refresh
718-
Sec-Session-Response: "eyJhbGciOiJFUzI1NiIsInR5cCI6ImRic2Mrand0In0.eyJhdWQiOiJodHRwczovL2V4YW1wbGUuY29tL3JlZyIsImp0aSI6ImN2IiwiaWF0IjoiMTcyNTU3OTA1NSIsImp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IjZfR0Iydm9RMHFyb01oNk9sREZDRlNfU0pyaVFpMVBUdnZCT2hHWjNiSEkiLCJ5IjoiSWVnT0pVTHlFN1N4SF9DZDFLQ0VSN2xXQnZHRkhRLWgweHlqelVqRUlXRSJ9LCJhdXRob3JpemF0aW9uIjoiYWMifQ.6Fb_vVBDmfNghQiBmIGe8o7tBfYPbPCywhQruP0vIhxgmcJmuNTaMHeVn_M8ZnOm1_bzIitbZqCWEn-1Qzmtyw"
718+
Secure-Session-Response: "eyJhbGciOiJFUzI1NiIsInR5cCI6ImRic2Mrand0In0.eyJhdWQiOiJodHRwczovL2V4YW1wbGUuY29tL3JlZyIsImp0aSI6ImN2IiwiaWF0IjoiMTcyNTU3OTA1NSIsImp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IjZfR0Iydm9RMHFyb01oNk9sREZDRlNfU0pyaVFpMVBUdnZCT2hHWjNiSEkiLCJ5IjoiSWVnT0pVTHlFN1N4SF9DZDFLQ0VSN2xXQnZHRkhRLWgweHlqelVqRUlXRSJ9LCJhdXRob3JpemF0aW9uIjoiYWMifQ.6Fb_vVBDmfNghQiBmIGe8o7tBfYPbPCywhQruP0vIhxgmcJmuNTaMHeVn_M8ZnOm1_bzIitbZqCWEn-1Qzmtyw"
719719
```
720720
</div>
721721

722-
## `Sec-Session-Id` HTTP Header Field ## {#header-sec-session-id}
723-
The \`<dfn export http-header id="sec-session-id-header">
724-
<code>Sec-Session-Id</code></dfn>\` header field can be used in the
722+
## `Sec-Secure-Session-Id` HTTP Header Field ## {#header-sec-secure-session-id}
723+
The \`<dfn export http-header id="sec-secure-session-id-header">
724+
<code>Sec-Secure-Session-Id</code></dfn>\` header field can be used in the
725725
[=request=] by the user agent to request the current session is refreshed,
726726
with the current session identifier as a string argument.
727727

728-
\`<a http-header><code>Sec-Session-Id</code></a>\` is a structured header.
728+
\`<a http-header><code>Sec-Secure-Session-Id</code></a>\` is a structured header.
729729
Its value must be a string. It's ABNF is:
730730
<pre class="abnf">SecSessionChallenge = <a>sf-string</a></pre>
731731
This string MUST only contain the session identifier. Any parameters SHOULD be
732732
ignored.
733733

734-
<div class="example" id="sec-session-id-example">
734+
<div class="example" id="sec-secure-session-id-example">
735735
```html
736736
POST example.com/refresh
737-
Sec-Session-Id: "session-id"
737+
Sec-Secure-Session-Id: "session-id"
738738
```
739739
</div>
740740

@@ -793,7 +793,7 @@ At the root of the JSON object, the following keys can exist:
793793
:: a [=boolean=] describing the wanted session behavior during a session
794794
refresh. If this value is true all requests related to this session will be
795795
deferred while the session is refreshed. If instead the value is false every
796-
request will instead be sent as normal, but with a [:Sec-Session-Response:]
796+
request will instead be sent as normal, but with a [:Secure-Session-Response:]
797797
header containing the [=DBSC proof=].
798798
This key is OPTIONAL, and if not present a value of true is default.
799799

@@ -816,7 +816,7 @@ At the root of the JSON object, the following keys can exist:
816816
[[#algo-request-in-scope]] for details.
817817
</dl>
818818

819-
<div class="example" id="sec-session-instruction-example">
819+
<div class="example" id="secure-session-instruction-example">
820820
```json
821821
{
822822
"session_identifier": "session_id",
@@ -948,11 +948,11 @@ The payload of [=DBSC proof=] MUST contain at least the following claims:
948948
</dl>
949949

950950
In addition the following claims MUST be present if present in
951-
[:Sec-Session-Registration:]:
951+
[:Secure-Session-Registration:]:
952952
<dl dfn-for="DBSC proof">
953953
: <dfn>authorization</dfn>
954954
:: a [=string=], direct copy of the string from
955-
[:Sec-Session-Registration:], if set there. Note that this string is
955+
[:Secure-Session-Registration:], if set there. Note that this string is
956956
OPTIONAL to include in the header, but if it is present it is
957957
MANDATORY for clients to add the claim in the [=DBSC proof=].
958958
</dl>
@@ -991,7 +991,7 @@ present:
991991
Based on this response header from the server:
992992
```html
993993
HTTP/1.1 200 OK
994-
Sec-Session-Registration: (ES256);path="reg";challenge="cv";authorization="ac"
994+
Secure-Session-Registration: (ES256);path="reg";challenge="cv";authorization="ac"
995995
```
996996
received on a response from ```http://example.com/page.html```
997997
</div>
@@ -1028,10 +1028,10 @@ registered domain.
10281028
The permanent message header field registry should be updated with the following
10291029
registrations: [[!RFC3864]]
10301030

1031-
## Sec-Session-Challenge ## {#iana-ses-session-challenge}
1031+
## Secure-Session-Challenge ## {#iana-ses-session-challenge}
10321032
<dl>
10331033
<dt>Header field name</dt>
1034-
<dd>Sec-Session-Challenge</dd>
1034+
<dd>Secure-Session-Challenge</dd>
10351035

10361036
<dt>Applicable protocol</dt>
10371037
<dd>http</dd>
@@ -1043,13 +1043,13 @@ registrations: [[!RFC3864]]
10431043
<dd>W3C</dd>
10441044

10451045
<dt>Specification document</dt>
1046-
<dd>This specification (See [[#header-sec-session-challenge]])</dd>
1046+
<dd>This specification (See [[#header-secure-session-challenge]])</dd>
10471047
</dl>
10481048

1049-
## Sec-Session-Id ## {#iana-ses-session-id}
1049+
## Sec-Secure-Session-Id ## {#iana-sec-secure-session-id}
10501050
<dl>
10511051
<dt>Header field name</dt>
1052-
<dd>Sec-Session-Id</dd>
1052+
<dd>Sec-Secure-Session-Id</dd>
10531053

10541054
<dt>Applicable protocol</dt>
10551055
<dd>http</dd>
@@ -1061,13 +1061,13 @@ registrations: [[!RFC3864]]
10611061
<dd>W3C</dd>
10621062

10631063
<dt>Specification document</dt>
1064-
<dd>This specification (See [[#header-sec-session-id]])</dd>
1064+
<dd>This specification (See [[#header-sec-secure-session-id]])</dd>
10651065
</dl>
10661066

1067-
## Sec-Session-Registration ## {#iana-sec-session-registration}
1067+
## Secure-Session-Registration ## {#iana-secure-session-registration}
10681068
<dl>
10691069
<dt>Header field name</dt>
1070-
<dd>Sec-Session-Registration</dd>
1070+
<dd>Secure-Session-Registration</dd>
10711071

10721072
<dt>Applicable protocol</dt>
10731073
<dd>http</dd>
@@ -1079,13 +1079,13 @@ registrations: [[!RFC3864]]
10791079
<dd>W3C</dd>
10801080

10811081
<dt>Specification document</dt>
1082-
<dd>This specification (See [[#header-sec-session-registration]])</dd>
1082+
<dd>This specification (See [[#header-secure-session-registration]])</dd>
10831083
</dl>
10841084

1085-
## Sec-Session-Response ## {#iana-sec-session-response}
1085+
## Secure-Session-Response ## {#iana-secure-session-response}
10861086
<dl>
10871087
<dt>Header field name</dt>
1088-
<dd>Sec-Session-Response</dd>
1088+
<dd>Secure-Session-Response</dd>
10891089

10901090
<dt>Applicable protocol</dt>
10911091
<dd>http</dd>
@@ -1097,7 +1097,7 @@ registrations: [[!RFC3864]]
10971097
<dd>W3C</dd>
10981098

10991099
<dt>Specification document</dt>
1100-
<dd>This specification (See [[#header-sec-session-response]])</dd>
1100+
<dd>This specification (See [[#header-secure-session-response]])</dd>
11011101
</dl>
11021102

11031103
## Secure-Session-Skipped ## {#iana-secure-session-skipped}

0 commit comments

Comments
 (0)