WebID
And the Privacy Sandbox
@goto, @kaustubhag
�
WICG Workshop 2021
The Privacy Sandbox
The Privacy Sandbox initiative aims to create web technologies that both protect people’s privacy online and give companies and developers the tools to build thriving digital businesses to keep the web open and accessible to everyone.
The Privacy Model [1]�
[1] https://github.com/michaelkleber/privacy-model
APIs
SaaS Embeds (CHIPS), Spam/Fraud (Trust Tokens), Ads (attribution reporting, etc), First Party Sets, Fenced Frames, …
�… and ...
Federated Identity
What is it?
Users sign-in to a RP (relying party) with an IDP (Identity provider)
Why do we think it’s important?
�Federated identity is safer* than per-site usernames and passwords
* phishing, password reuse, etc
What’s the problem?
By design, Identity federation was built on top of low-level primitives*.
By accident, the same primitives also enable cross-site tracking.��
* iframes, third party cookies, redirects
your@email.com
******
Sign Up
https://example1.com
John Doe�johndoe@email.com
Sign-in to example.com with IDP
Continue as John
forgot password
your@email.com
******
Sign Up
https://example2.com
John Doe�johndoe@email.com
Sign-in to example.com with IDP
Continue as John
forgot password
Browser
RP
IDP
The classification Problem
https://idp.com
Signing-out of RP1
Signing out of your apps
Signing-out of RP2
Signing-out of RPn
...
logging out
******
Sign Up
https://example1.com
Continue as John
forgot password
your@email.com
Or register with usernames and passwords
personalized buttons
******
Sign Up
https://example1.com
John Doe�johndoe@email.com
Sign-in to example1.com with IDP
Continue as John
forgot password
your@email.com
social widgets
3P cookies use in Federation
Browser
RP
IDP
The Classification Problem
Browser
RP
Tracker
https://rings.com
Engagement Rings!
Buy
US$ 1000
User 123 viewed engagement rings
https://tracker.com
Redirecting you ...
https://shoes.com
Engagement Shoes!
Buy
US$ 32
User 123 viewed engagement shoes
https://tracker.com
Redirecting you ...
The IDP and RP Tracking Problems
Yes
Welcome Bob!��Are you trying to create an account with rp1.example?
https://idp.example
IDP’s log
Sign in with IDP1
https://rp1.example
Sign in with IDP2
Sam Goto�samuelgoto@gmail.com
John Doe
johndoe@email.com
∑ RP’s log
John Doe has visited rp1.example
Sign in with IDP1
https://rp2.example
Sign in with IDP2
Sam Goto�samuelgoto@gmail.com
John Doe�johndoe@email.com
global identifiers
...
John Doe has visited rp2.example
...
What’s WebID*?
A high-level, identity-specific, privacy-preserving browser API that enables identity federation to continue thriving on the web.
* Oops. Web Sign-in?�
Useful principles so far
Users first*.
Developers 2nd, browser engines 3rd, technical purity 4th.
* you’d be surprised how often this is used.��
Private by default.
Partitioned by first party site by default, global* by choice [1].
* yes, we expect enterprises and education to pick different defaults.��[1] https://github.com/michaelkleber/privacy-model
�
Minimize redeployment.
O(B) of users*, O(M) of RPs**, O(K) of IDPs***, O(10) browser engines.
* no, we won’t start with the NASCAR�** yes, customer support is hard too�*** consumer IDPs control JS SDKs!�
Classes of solutions
Permission
Browser is only involved to capture user consent for tracking.
Pros
Backwards compatible. Extensibility.�Cons
Permission-blindness* ineffective at driving change.���* on the way of the job to be done��
Mediation
Browser renders parts of the IDP flow in the browser consent moments.
Pros
Deployable by IDPs. Meaningful permission.
Cons
Ossification*.
* basic auth anyone?
Delegation
IDP delegates much of the responsibility for minting tokens to the browser.
Pros
Frictionless, consequence-free.
Cons
RP backwards incompatible *.
* reminder: O(M) of RPs
The Permission-oriented API
The Mediation-oriented API
Pros: most backwards compatible�Cons: permission-blindness
Pros: meaningful permission�Cons: ossification
Sign in with IDP1
https://rp2.example
Sign in with IDP2
The unbundling of global identification into directed and �The unbundling of issuing and presentation
Welcome John!�
https://idp.example
user-agent://holder
Sign in with IDP1
https://rp1.example
Sign in with IDP2
Sam Goto�samuelgoto@gmail.com
∑ RP’s log
Not viable anymore
J.D..�abc@email.com
Directed
Global
Issues
John Doe�johndoe@email.com
Not observable anymore
IDP’s log
Sam Goto�samuelgoto@gmail.com
J.D..�def@email.com
Presents
20??
2020
2021
2022
Here are 3 options�I2P
I2E?
I2S?
Oops, we have a problem
Hi there!
today
Prototyping
Devtrial
Hello WICG, OIDF
Origin Trial
The End State
Is this even a problem?
Would these even work?
This could work. How can I try?
This should be even better!
Why > What > How > Who > When
Stable
You
Thanks!
Intro
ANNEX
Intro
The progressive disclosure of identification
******
https://rp.example
your@email.com
Sign Up
Sign Up with IDP.example!
or
Self-issued Directed Identity
J. D.�Forward to johndoe@email.com
Sign-in to rp.example with idp.example
Continue as J. D.
Authorization
https://rp.example
Connect your calendar with us to allow us to manage your schedule!
Connect my calendar!
rp.example is asking for access to your calendar:
Block
Allow
Welcome J.D!
We need to confirm your real email address to unlock certain features.
Share my email address
https://rp.example
Progressively Identification
rp.example is asking for access to your email address:
�johndoe@email.com
Allow
Block
Show me the code
Intro
// Exact API largely TBD. Our best guess so far:
const token = await navigator.credentials.get({
provider: "https://idp.example",
request: {� client_id=”1234”,
nonce: “Ct60bD”,
},
mode: "permission" || “mediation” || “delegation”,
});
Demos
Intro
The Mediation-oriented API
The Permission-oriented API
WebAuthn?
WebOTP?
Forms?
Intro
User
Identity
Account
Session
Registration
Authentication
Session Authentication
Loss
Expiration
Verification
Usernames
Emails
Phone #s
Passwords, JWTs
Recovery
Profile
Names, Age, Social Graph
Personalization
SMS OTP, Magic Links
WebID + Forms
WebOTP
WebAuthn
Cookies
2FA
Biometrics
The Identity Lifecycle
GC
Intro