-
Notifications
You must be signed in to change notification settings - Fork 4
Comparing FedCM and Lightweight FedCM
bvandersloot-mozilla edited this page Aug 28, 2024
·
1 revision
| Lightweight FedCM | FedCM | |
|---|---|---|
| when token* creation occurs | IDP page | RP page |
| token* lifetime | until overwritten by the IDP | API-call duration |
| where tokens* are stored | in the browser | not stored |
| are tokens* RP-specific? | no, unless you store a credential for each RP the IDP may have for that user | yes |
| how does the RP communicate to the IDP? | via URL parameters only if the IDP hasn't stored an effective credential yet, or via unpartitioned network requests after the UI is shown | the nonce parameter (and params parameter**) |
| account chooser UI hints | stored in-browser, with lifetime specified by IDP | dynamically fetched |
| allow Storage Access autogrant | yes | yes |
| multiple IDPs supported | yes | yes** |
| BYO-IDP supported | yes | yes** |
| round trips to IDP to show UI | 0 or 1 | 3 |
| IDP HTTP endpoints | 0 or 1 that replies 200 OK to RPs in the Origin Header | 3 or 4 custom endpoints |
| .well-known file required | no | yes, on eTLD+1 |
| UI shown | account picker | account picker, ToS/PP dialog |
| account picker control by IDP and RP | icon and name*** | picture, name, email, given name, "context", domain hint, login hints, optional ToS/PP bypass, color, background color, identity provider icon, identity provider name |
| login status endpoint | navigator.credentials.store |
navigator.login.setStatus |
| unlinking API | re-store the credential, ineffective for the RP | IdentityProvider.disconnect() |
* tokens are just arbitrary IDP data.
** proposed extension
*** If you want more control, it is advised you show website-specific information in the icon/name and use an IDP page to present auth choices.
| Lightweight FedCM | FedCM | |
|---|---|---|
| Works without 3PC | yes | yes |
| Allows navigational tracking | yes | no |
| Timing attack | only via navigation* | yes |
| IDP can not learn about RP until the user selects it | only via navigation* | yes |
| Lifetime of IDP-RP-Linkage | until navigator.credentials.preventSilentAccess is called (should be when the RP logs out) |
forever |
* the navigation is the equivalent of a window.open call initiated by the RP