@@ -815,8 +815,7 @@ registration and optionally during session refresh. If the response
815815contains session instructions, it MUST be in JSON format.
816816
817817At the root of the JSON object, the following keys can exist:
818- <dl dfn-for="session instructions">
819- : <dfn>session identifier</dfn>
818+ : session identifier
820819 :: a [=string=] representing a [=device bound session/session identifier=] .
821820 If this [=session instructions=] is sent during a refresh request this MUST be
822821 the [=device bound session/session identifier=] for the current session. If
@@ -827,38 +826,29 @@ At the root of the JSON object, the following keys can exist:
827826 current [=host/registrable domain=] .
828827 This key MUST be present.
829828
830- : <dfn> refresh_url</dfn>
829+ : refresh_url
831830 :: a [=string=] representing the [=URL=] used for future refresh requests.
832831 This can be a full [=URL=] , or relative to the current [=request=] .
833832 This key is OPTIONAL; if not present the registration URL will be used for
834833 future refresh requests.
835834
836- : <dfn>defer_requests</dfn>
837- :: a [=boolean=] describing the wanted session behavior during a session
838- refresh. If this value is true all requests related to this session will be
839- deferred while the session is refreshed. If instead the value is false every
840- request will instead be sent as normal, but with a [:Secure-Session-Response:]
841- header containing the [=DBSC proof=] .
842- This key is OPTIONAL, and if not present a value of true is default.
843-
844- : <dfn>continue</dfn>
835+ : continue
845836 :: a [=boolean=] indicating if the session should continue to apply.
846837 Registration and refresh endpoints can set this to false to terminate a session.
847838 This key is OPTIONAL, and if not present, the default value will be true.
848839
849- : <dfn> scope</dfn>
840+ : scope
850841 :: a [=dictionary=] of [=session scope instructions=] describing the request
851842 destinations covered by the session. This field MUST be present.
852843
853- : <dfn> credentials</dfn>
844+ : credentials
854845 :: a [=list=] of [=session credentials=] describing the cookies protected by
855846 this session. This field MUST be present.
856847
857- : <dfn> allowed_refresh_initiators</dfn>
848+ : allowed_refresh_initiators
858849 :: a [=list=] of [=string=] s describing which hosts are allowed to initiate
859850 DBSC refreshes due to non-CORS requests. See
860851 [[#algo-request-allows-refresh]] for details.
861- </dl>
862852
863853<div class="example" id="secure-session-instruction-example">
864854 ```json
@@ -905,108 +895,94 @@ The server sends <dfn>session scope instructions</dfn> in the [=session
905895instructions=] during registration and optionally during session refresh.
906896
907897At the root of the JSON object, the following keys can exist:
908- <dl dfn-for="session scope instructions">
909- : <dfn>origin</dfn>
898+ : origin
910899 :: a [=string=] indicating the origin or site that the session applies to.
911900 This key is OPTIONAL; if not present, the origin of the URL serving the
912901 instructions will be used. This is the registration URL during registration
913902 and the refresh URL during refresh.
914903
915- : <dfn> include_site</dfn>
904+ : include_site
916905 :: a [=boolean=] indicating if the session is origin-scoped (false) or
917906 site-scoped (true). This key is OPTIONAL; if not present, it will be false
918907 (origin-scoped). Note that this takes precedence over any
919- [=session scope rule=] s in [=scope_specification =] (see
920- [[#algo-url-in-scope]] ).
908+ [=session scope rule=] s in [=scope specification =] (see
909+ [[#algo-url-in-scope]] ).
921910
922- : <dfn> scope_specification</dfn>
911+ : scope_specification
923912 :: a [=list=] of [=session scope rule=] s describing modifications to the
924913 default scope (the entire origin or site). This key is OPTIONAL; if not
925914 present, an empty list will be used.
926- </dl>
927915
928916## DBSC Session Scope Rule Format ## {#format-session-scope-rule}
929917The server sends <dfn>session scope rule</dfn> s in the [=session scope
930918instructions=] during registration and optionally during session refresh.
931919
932920At the root of each [=session scope rule=] , the following keys can exist:
933- <dl dfn-for="session scope rule">
934- : <dfn>type</dfn>
921+ : type
935922 :: a [=string=] indicating whether the rule includes or excludes destinations.
936923 This key MUST be present, and the value MUST be "include" or "exclude".
937924
938- : <dfn> domain</dfn>
925+ : domain
939926 :: a [=string=] indicating the domains that should match the rule. This key
940927 MUST be present. This can include wildcards (see [[#algo-url-in-scope]] ).
941928
942- : <dfn> path</dfn>
929+ : path
943930 :: a [=string=] indicating the path-prefixes that should match the rule. This
944931 key MUST be present. See [[#algo-url-in-scope]] for the detailed semantics.
945- </dl>
946932
947933## DBSC Session Credentials Format ## {#format-session-credentials}
948934The server sends <dfn>session credentials</dfn> in the [=session
949935instructions=] during registration and optionally during session refresh.
950936
951937At the root of the JSON object, the following keys can exist:
952- <dl dfn-for="session scope instructions">
953- : <dfn>type</dfn>
938+ : type
954939 :: a [=string=] indicating the kind of credential protected by this session.
955940 This key MUST be present, and the value MUST be "cookie".
956941
957- : <dfn> name</dfn>
942+ : name
958943 :: a [=string=] indicating the name of the bound cookie.
959944
960- : <dfn> attributes</dfn>
945+ : attributes
961946 :: a [=string=] containing the expected attributes of the protected cookie.
962947 See [[#algo-identify-missing-session-credential]] for details on how this
963948 is used.
964- </dl>
965949
966950## DBSC Proof JWT Syntax ## {#format-jwt}
967951A <dfn>DBSC proof</dfn> proof is a JWT that is signed (using JSON Web Signature
968952(JWS)), with a private key chosen by the client. The header of a [=DBSC proof=]
969953MUST contain at least the following <a>sf-parameter</a> s:
970- <dl dfn-for="DBSC proof">
971- : <dfn>typ</dfn>
954+ : typ
972955 :: a [=string=] MUST be "dbsc+jwt"
973- : <dfn> alg</dfn>
956+ : alg
974957 :: a [=string=] defining the algorithm used to sign this JWT. It MUST be
975958 either "RS256" or "ES256" from [IANA.JOSE.ALGS] .
976- </dl>
977959
978960The payload of [=DBSC proof=] MUST contain at least the following claims:
979- <dl dfn-for="DBSC proof">
980- : <dfn>aud</dfn>
961+ : aud
981962 :: a [=string=] , MUST be the [=URL=] this JWT was originally sent to.
982963 Example: "https://example.com/refresh.html"
983- : <dfn> jti</dfn>
964+ : jti
984965 :: a [=string=] , a copy of the challenge value sent in the registration
985966 header.
986- : <dfn> iat</dfn>
967+ : iat
987968 :: a [=string=] , this claim identifies the time at which the JWT was
988969 issued. This claim can be used to determine the age of the JWT. Its
989970 value MUST be a number containing a NumericDate value.
990- : <dfn> key</dfn>
971+ : key
991972 :: a [=string=] defining a JWK as specified in [rfc7517] .
992- </dl>
993973
994974In addition the following claims MUST be present if present in
995975[:Secure-Session-Registration:] :
996- <dl dfn-for="DBSC proof">
997- : <dfn>authorization</dfn>
976+ : authorization
998977 :: a [=string=] , direct copy of the string from
999978 [:Secure-Session-Registration:] , if set there. Note that this string is
1000979 OPTIONAL to include in the header, but if it is present it is
1001980 MANDATORY for clients to add the claim in the [=DBSC proof=] .
1002- </dl>
1003981
1004982If the DBSC proof is for a refresh request, the following claim MUST be
1005983present:
1006- <dl dfn-for="DBSC proof">
1007- : <dfn>sub</dfn>
984+ : sub
1008985 :: the [=device bound session/session identifier=] , a [=string=] .
1009- </dl>
1010986
1011987<div class="example" id="dbsc-proof-example">
1012988 An example [=DBSC proof=] sent to https://example.com/reg:
@@ -1046,12 +1022,13 @@ present:
10461022
10471023This specification requires an update to the <a
10481024href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch"> HTTP-network-or-cache
1049- fetch</a> algorithm. A [=request=] has a [=list=] of [=tuple=] s
1050- ([=host/registrable domain=] |domain|, [=string=] |session id|), <dfn
1051- for="request"> deferred device bound session ids</dfn> . This list is initially
1052- empty. At the end of step 8.21
1053- run [[#algo-identify-session-needing-refresh]] . If the resulting |session| is
1054- non-null:
1025+ fetch</a> algorithm. A [=request=] has a <dfn
1026+ for="request"> deferred device bound session ids</dfn> , a [=list=] of [=tuple=] s consisting of:
1027+ - a domain (a [=host/registrable domain=] ).
1028+ - a session id (a [=string=] ).
1029+ This list is initially empty. At the end of step 8.21, run
1030+ [[#algo-identify-session-needing-refresh]] . If the resulting
1031+ |session| is non-null:
10551032 1. Run [[#algo-session-request]] with the returned |session|'s
10561033 [=session key=] , [=refresh URL=] , [=device bound session/session
10571034 identifier=] , [=cached challenge=] , and an empty authorization.
0 commit comments