Skip to content

Commit bec12c8

Browse files
committed
Address some of the feedback
1 parent fb422b7 commit bec12c8

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

BindingContext/BPoP.md

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,45 @@
55
- [Will Bartlett](mailto:[email protected])
66
- [Sameera Gajjarapu](mailto:[email protected])
77

8-
## Participate
8+
## Participate (Coming soon)
99
- [Issue tracker]
1010
- [Discussion forum]
1111

1212
## Table of Contents [if the explainer is longer than one printed page]
1313

14-
[You can generate a Table of Contents for markdown documents using a tool like [doctoc](https://github.com/thlorenz/doctoc).]
14+
[You can generate a Table of Contents for markdown documents using a tool like [doctoc](https://github.com`/thlorenz/doctoc).]
1515

1616
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
1717
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
1818
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
1919

20-
- [Introduction](#introduction)
21-
- [Goals [or Motivating Use Cases, or Scenarios]](#goals-or-motivating-use-cases-or-scenarios)
22-
- [Non-goals](#non-goals)
23-
- [BPoP functionality](#bpop-functionality)
24-
- [Usecases](#usecases)
25-
- [CNAMEs](#cnames)
26-
- [Server activation](#server-activation)
27-
- [Header based model:](#header-based-model)
28-
- [JS API based model:](#js-api-based-model)
29-
- [Browser BPoP proofs](#browser-bpop-proofs)
30-
- [Detailed design](#detailed-design)
31-
- [Storage model](#storage-model)
32-
- [Retrieval model](#retrieval-model)
33-
- [Application model](#application-model)
34-
- [BPoP key verification](#bpop-key-verification)
35-
- [BPoP background refresh](#bpop-background-refresh)
36-
- [Server challenge](#server-challenge)
37-
- [Server update](#server-update)
38-
- [Considered alternatives](#considered-alternatives)
39-
- [TLS Token Binding](#tls-token-binding)
40-
- [Stakeholder Feedback / Opposition](#stakeholder-feedback--opposition)
41-
- [References & acknowledgements](#references--acknowledgements)
20+
- [Demonstrating Proof-of-Possession in the Browser Application (for authentication cookies) (BPoP)](#demonstrating-proof-of-possession-in-the-browser-application-for-authentication-cookies-bpop)
21+
- [Authors:](#authors)
22+
- [Participate (Coming soon)](#participate-coming-soon)
23+
- [Table of Contents \[if the explainer is longer than one printed page\]](#table-of-contents-if-the-explainer-is-longer-than-one-printed-page)
24+
- [Introduction](#introduction)
25+
- [Goals \[or Motivating Use Cases, or Scenarios\]](#goals-or-motivating-use-cases-or-scenarios)
26+
- [Non-goals](#non-goals)
27+
- [BPoP functionality](#bpop-functionality)
28+
- [Usecases](#usecases)
29+
- [CNAMEs](#cnames)
30+
- [Design proposal](#design-proposal)
31+
- [Server activation](#server-activation)
32+
- [Header based model:](#header-based-model)
33+
- [JS API based model:](#js-api-based-model)
34+
- [Browser BPoP proofs](#browser-bpop-proofs)
35+
- [Detailed design](#detailed-design)
36+
- [Storage model](#storage-model)
37+
- [Retrieval model](#retrieval-model)
38+
- [Application model](#application-model)
39+
- [BPoP key verification](#bpop-key-verification)
40+
- [BPoP background refresh](#bpop-background-refresh)
41+
- [Server challenge](#server-challenge)
42+
- [Server update](#server-update)
43+
- [Considered alternatives](#considered-alternatives)
44+
- [TLS Token Binding](#tls-token-binding)
45+
- [Stakeholder Feedback / Opposition](#stakeholder-feedback--opposition)
46+
- [References \& acknowledgements](#references--acknowledgements)
4247

4348
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
4449

@@ -66,8 +71,11 @@ This document makes direct analogs to DPoP, e.g. defining a "BPoP Proof" to matc
6671

6772
A website that is its own standalone identity provider (i.e. a website that accepts a username and password) could activate BPoP as part of rending the login form. Then, on the subsequent request, when the website verifies the username and password and issues an authentication cookie, the website could also verify the BPoP proof and record the public key associated with the BPoP proof in the authentication cookie. If this website had user submitted content and such content was subsequently used as part of a stored cross site scripting (XSS) attack, this attack would be unable to steal the BPoP private key and thus the attacker would be unable to use any stolen cookies.
6873

74+
BPoP also helps in mitigating the man-in-the-middle attacks where an attacker incercepting the traffic and stealing any artifacts will not be able to apply them without the extra proof we require with this protocol. Same with the on-device attacks which can result in the cookie-jar being stolen, will not be able to use those cookies for acquiring access to other resources.
75+
6976
A website that uses a federated identity provider could activate BPoP as part of redirecting to the federated identity provider. Then, on the response back from the federated identity provider, when the website verifies the federation response and issues an authentication cookie, the website could also verify the BPoP proof and record the public key associated with the BPoP proof in the authentication cookie. If this website were vulnerable to a reflected XSS which stole the authentication cookie, the attacker would be unable to use that stolen cookie, as the attacker would be unable to produce a BPoP proof.
7077

78+
7179
BPoP is also not strictly limited to cookies - it can be used to bind any artifact which is issued and accepted by the same web server (e.g. an ASP.NET ViewState).
7280

7381
### CNAMEs
@@ -76,6 +84,15 @@ One prominent place where authentication cookies may be shared with multiple par
7684

7785
While it is possible for `example.com` to properly audience constrain cookies today (e.g. by issuing one cookie for each subdomain, rather than one cookie in the top-level domain), doing so in practice has proven to be prohibitively cumbersome for many deployments.
7886

87+
### Design proposal
88+
89+
Here is how BPoP is expected to work end-to-end:
90+
91+
1. Webpage user goes to `example.com`, and initiates login. `example.com` redirects to `login.microsoftonline.com`, using javascript or http headers to active binding for `example.com` cookies.
92+
2. `login.microsoftonline.com`, shows password prompt, javascript or http header activates binding for eSTS cookie
93+
3. enter password, ESTS SHR in http request, response contains bound eSTS cookie, redirect to example.com with auth code
94+
4. `example.com` SHR in http request, response from `example.com` contains bound `example.com` cookie
95+
7996
### Server activation
8097

8198
BPoP is designed to be linked to a classic OAuth session (can be any other authentication mechanism), and when a user makes a request to authenticate, the server also returns a response header `BPoP` to active binding. `BPoP` is a [structured header](https://www.rfc-editor.org/rfc/rfc8941.html) whose value is a dictionary. The following keys are recognized:
@@ -210,6 +227,8 @@ BPoP: enabled, SameSite=None
210227

211228
The latest configuration replaces the previous configuration. Replacement occurs for the entire config, not just for configuration elements who appear in the `BPoP` header.
212229

230+
Please note that this behavior applies only when there is no enterprise policy override. In case if enterprise policy enabled by the browser config, the BPoP behaves as configured by the policy. More details on key management and storage for enterprise use cases are covered later in this document.
231+
213232
### Retrieval model
214233

215234
The browser only attaches BPoP proofs to "secure" protocols (as defined by the user agent).

0 commit comments

Comments
 (0)