From 22e59fa2e8e35847197708d8967a9b71cba81055 Mon Sep 17 00:00:00 2001 From: Simone Onofri Date: Wed, 21 Aug 2024 10:33:51 +0000 Subject: [PATCH] [link-validator] Missing file context-api.md (#637) SHA: dc0cfce63c89bd696660de7a49a98f796e3a3b0e Reason: push, by pull[bot] Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- index.html | 1100 ++++++++++++++++++++++------------------------------ 1 file changed, 463 insertions(+), 637 deletions(-) diff --git a/index.html b/index.html index 6d3d0ac3..024192c5 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,12 @@ - Federated Credential Management API - + Federated Credential Management API + - - + + - +

Federated Credential Management API

-

Draft Community Group Report,

-
-
-
This version: -
https://fedidcg.github.io/FedCM/ -
Test Suite: -
https://github.com/web-platform-tests/wpt/blob/master/credential-management/ -
Issue Tracking: -
GitHub -
Inline In Spec -
Editor: -
(Google Inc.) -
Former Editor: -
(Google Inc.) -
-
+

Editor’s Draft,

+
+ More details about this document +
+
+
This version: +
https://w3c-fedid.github.io/FedCM/ +
Latest published version: +
https://www.w3.org/TR/fedcm/ +
Test Suite: +
https://github.com/web-platform-tests/wpt/tree/master/fedcm +
Feedback: +
GitHub +
Inline In Spec +
Editor: +
(Google Inc.) +
Former Editor: +
(Google Inc.) +
+
+
- +

Abstract

A Web Platform API that allows users to login to websites with their federated accounts in a privacy preserving manner.

-
-

Status of this document

+

Status of this document

-

This specification was published by the Federated Identity Community Group. - It is not a W3C Standard nor is it on the W3C Standards Track. - - Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. - - Learn more about W3C Community and Business Groups.

+

This is a public copy of the editors’ draft. + It is provided for discussion only and may change at any moment. + Its publication here does not imply endorsement of its contents by W3C. + Don’t cite this document other than as work in progress.

+

Changes to this document may be tracked at https://github.com/w3c-fedid/.

+

The (archived) public mailing list public-fedid-wg@w3.org (see instructions) + is preferred for discussion of this specification. + When sending e-mail, + please put the text “fedcm” in the subject, + preferably like this: + “[fedcm] …summary of comment…

+

This document was produced by the Federated Identity Working Group.

+

This document was produced by a group operating under + the W3C Patent Policy. + W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; + that page also includes instructions for disclosing a patent. + An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

+

This document is governed by the 03 November 2023 W3C Process Document.

@@ -965,9 +761,10 @@

Table of Contents

2.1 The Login Status API
  1. 2.1.1 Login Status Map -
  2. 2.1.2 HTTP header API -
  3. 2.1.3 JavaScript API -
  4. 2.1.4 Clearing the Login Status Map data +
  5. 2.1.2 Infrastructure algorithm +
  6. 2.1.3 HTTP header API +
  7. 2.1.4 JavaScript API +
  8. 2.1.5 Clearing the Login Status Map data
  • 2.2 The connected accounts set
  • @@ -1018,7 +815,8 @@

    Table of Contents

    1. 6.1 Content Security Policy
    2. 6.2 Sec-Fetch-Dest Header -
    3. 6.3 Browser Surface Impersonation +
    4. 6.3 CORS Header +
    5. 6.4 Browser Surface Impersonation
  • 7 Privacy @@ -1039,10 +837,12 @@

    Table of Contents

  • 8 Extensibility
  • 9 Acknowledgements +
  • 10 FPWD Issues
  • Conformance
    1. Document conventions +
    2. Conformant Algorithms
  • Index @@ -1061,10 +861,10 @@

    Table of Contents

    - - - - + + + +

    1. Introduction

    This section is non-normative.

    As the web has evolved there have been ongoing privacy-oriented changes @@ -1291,7 +1091,35 @@

    Set Login Status map[origin] to value.

    -

    2.1.2. HTTP header API

    +

    2.1.2. Infrastructure algorithm

    +
    + An environment settings object (settings) is same-site with its + ancestors if the following algorithm returns true: +
      +
    1. +

      If settings’s relevant global object has no associated Document, +return false.

      +
    2. +

      Let document be settingsrelevant global object's associated Document.

      +
    3. +

      If document has no browsing context, return false.

      +
    4. +

      Let origin be settingsorigin.

      +
    5. +

      Let navigable be document’s node navigable.

      +
    6. +

      While navigable has a non-null parent:

      +
        +
      1. +

        Set navigable to navigable’s parent.

        +
      2. +

        If navigable’s active document's origin is not same site with origin, return false.

        +
      +
    7. +

      Return true.

      +
    +
    +

    2.1.3. HTTP header API

    IDPs can set the login status using an HTTP response header as follows.

    The HTTP header checking should move into the Fetch spec, since it affects all resource loads.

    @@ -1310,9 +1138,9 @@

    If client is null, return.

  • -

    If origin is not same origin with the request's origin, return.

    +

    If origin is not same site with the request's origin, return.

  • -

    If client is not same-origin with its ancestors, return.

    +

    If client is not same-site with its ancestors, return.

  • Assert that value is a tuple.

    @@ -1324,7 +1152,7 @@

    If token is "logged-out", set the login status for origin to logged-out.

    -

    2.1.3. JavaScript API

    +

    2.1.4. JavaScript API

    IDPs can also use a JavaScript API to update the stored login status:

    enum LoginStatus {
       "logged-in",
    @@ -1344,17 +1172,17 @@ 

    setStatus() is called with argument status:
    1. -

      If the current settings object is not same-origin with its ancestors, +

      If the current settings object is not same-site with its ancestors, throw a SecurityError DOMException.

    2. -

      Let origin be the current settings object's origin.

      +

      Let origin be the current settings object's origin.

    3. Let value be logged-in if status is "logged-in" or logged-out if status is "logged-out".

    4. Set the login status for origin to value.

    -

    2.1.4. Clearing the Login Status Map data

    +

    2.1.5. Clearing the Login Status Map data

    User agents MUST also clear the Login Status map data when:

    the user clears all cookies or site settings data @@ -1376,7 +1204,7 @@

    the user agent receives a Clear-Site-Data header with a value of "cookies" or "*", and the request's client is -not null, and the client’s origin is same +not null, and the client’s origin is same origin with the top-level origin

    while clearing cookies for @@ -1396,42 +1224,68 @@

    If a user clears browsing data for an origin (cookies, localStorage, etc.), the user agent MUST remove all triples with an origin matching the origin from connected accounts set.

    -
    - To compute the connection status given an IdentityProviderConfig provider, an IdentityProviderAccount account, and a globalObject, run the following steps. This returns connected or disconnected. +
    + To compute the connected account key given an IdentityProviderConfig provider, an IdentityProviderAccount account, and a globalObject, run the following steps. It returns a +triple of the form (rp, idp, account).
      -
    1. -

      If account contains approved_clients and account’s approved_clients does not contain provider’s clientId, return disconnected.

    2. Let configUrl be the result of running parse url with provider’s configURL and globalObject.

    3. Let idpOrigin be the origin corresponding to configUrl.

    4. -

      Let rpOrigin be globalObject’s associated Document's origin.

      +

      Let rpOrigin be globalObject’s associated Document's origin.

    5. Let accountId be account’s id.

    6. -

      Let triple be (rpOrigin, idpOrigin, accountId).

      +

      Return (rpOrigin, idpOrigin, accountId).

      +
    +
    +
    + When asked whether an IdentityProviderAccount account is eligible for auto reauthentication given an IdentityProviderConfig provider and a globalObject, run the following steps. This returns a boolean. +
      +
    1. +

      If account contains approved_clients and account’s approved_clients does not contain provider’s clientId, return false.

      +
    2. +

      Let triple be the result of running compute the connected account key given provider, account, and globalObject.

      +
    3. +

      Return whether connected accounts set contains triple.

      +
    +
    +
    + When asked to compute the connection status given an IdentityProviderAccount account, an IdentityProviderConfig provider and a globalObject, run the following steps. +This returns connected or disconnected. +
      +
    1. +

      If account contains approved_clients:

      +
        +
      1. +

        If account’s approved_clients containsprovider’s clientId, return connected.

        +
      2. +

        Return disconnected.

        +
    2. -

      If connected accounts set contains triple , return connected.

      +

      Let triple be the result of running compute the connected account key given provider, account, and globalObject.

    3. -

      Otherwise, return disconnected.

      +

      If connected accounts set contains triple, return connected.

      +
    4. +

      Return disconnected.

    - To create a connection between the RP and the IdP account given an IdentityProviderConfig provider, an IdentityProviderAccount account, and a globalObject (the RP's), run the following steps: + To create a connection between the RP and the IdP account given an IdentityProviderConfig provider, an IdentityProviderAccount account, and a globalObject (the RP's), run the following steps:
    1. Let configUrl be the result of running parse url with provider’s configURL and globalObject.

    2. Let idpOrigin be the origin corresponding to configUrl.

    3. -

      Let rpOrigin be globalObject’s associated Document's origin.

      +

      Let rpOrigin be globalObject’s associated Document's origin.

    4. Let accountId be account’s id.

    5. Let triple be (rpOrigin, idpOrigin, accountId).

    6. -

      Append triple to connected accounts set.

      +

      Append triple to connected accounts set.

    @@ -1441,10 +1295,10 @@

    Let triple be (rpOrigin, idpOrigin, accountId).

  • -

    If connected accounts set contains triple:

    +

    If connected accounts set contains triple:

    1. -

      Remove triple from the connected accounts set.

      +

      Remove triple from the connected accounts set.

    2. Return true.

    @@ -1456,16 +1310,16 @@

    remove all connections: given rpOrigin and idpOrigin, run the following steps:
    1. -

      For every (rp, idp, accountId) triple in the connected accounts set:

      +

      For every (rp, idp, accountId) triple in the connected accounts set:

      1. -

        If rp equals rpOrigin and idp equals idpOrigin, remove triple from the connected accounts set.

        +

        If rp equals rpOrigin and idp equals idpOrigin, remove triple from the connected accounts set.

  • 2.3. The IdentityCredential Interface

    This specification introduces a new type of Credential, called an IdentityCredential:

    -
    dictionary IdentityCredentialDisconnectOptions : IdentityProviderConfig {
    +
    dictionary IdentityCredentialDisconnectOptions : IdentityProviderConfig {
       required USVString accountHint;
     };
     
    @@ -1505,7 +1359,7 @@ 
    -

    The IdentityCredentialRequestOptions contains a list of IdentityProviderConfigs that the RP supports and has +

    The IdentityCredentialRequestOptions contains a list of IdentityProviderConfigs that the RP supports and has pre-registered with (i.e. the IDP has given the RP a clientId). The IdentityCredentialRequestOptions also contains a IdentityCredentialRequestOptionsContext which the user agent can use to provide a more meaningful dialog to users.

    enum IdentityCredentialRequestOptionsContext {
    @@ -1689,14 +1542,14 @@ 
    -

    Each IdentityProviderConfig represents an IDP that +

    Each IdentityProviderConfig represents an IDP that the RP supports (e.g. that it has a pre-registration agreement with).

    dictionary IdentityProviderConfig {
       required USVString configURL;
       required USVString clientId;
     };
     
    -dictionary IdentityProviderRequestOptions : IdentityProviderConfig {
    +dictionary IdentityProviderRequestOptions : IdentityProviderConfig {
       USVString nonce;
       DOMString loginHint;
       DOMString domainHint;
    @@ -1706,7 +1559,7 @@ 

    configURL

    The URL of the configuration file for the identity provider.

    -
    clientId +
    clientId

    The client_id provided to the RP out of band by the IDP

    nonce @@ -1718,7 +1571,7 @@

    IdentityProviderAccount.

    +match this login hint value. It generally matches some attribute from the desired IdentityProviderAccount.

    domainHint

    A string representing the domain hint corresponding to a domain which the RP is @@ -1733,15 +1586,15 @@

    origin
    -

    This argument is the relevant settings object's origin, as determined by the +

    This argument is the relevant settings object's origin, as determined by the calling get() implementation, i.e., CredentialsContainer's Request a Credential abstract operation.

    options
    -

    This argument is a CredentialRequestOptions object whose identity member exists.

    +

    This argument is a CredentialRequestOptions object whose identity member exists.

    sameOriginWithAncestors

    This argument is a Boolean value which is true if and only if the - caller’s environment settings object is same-origin with its ancestors. It is false if caller is cross-origin.

    + caller’s environment settings object is same-origin with its ancestors. It is false if caller is cross-origin.

    Note: Invocation of this internal method indicates that it was allowed by permissions policy, which is evaluated at the Credential Management Level 1 level. See § 4 Permissions Policy Integration. As such, sameOriginWithAncestors is unused.

    @@ -1906,7 +1759,7 @@

    <

    If provider’s loginHint is not empty:

    1. -

      For every account in accountList, remove account from accountList if account’s login_hints does not contain provider’s loginHint.

      +

      For every account in accountList, remove account from accountList if account’s login_hints does not contain provider’s loginHint.

    2. If accountList is now empty, go to the mismatch dialog step.

    @@ -1923,7 +1776,7 @@

    <

    If account’s domain_hints is empty, remove account from accountList.

  • -

    Otherwise, remove account from accountList if account’s domain_hints does not contain provider’s domainHint.

    +

    Otherwise, remove account from accountList if account’s domain_hints does not contain provider’s domainHint.

  • If accountList is now empty, go to the mismatch dialog step.

    @@ -1945,9 +1798,8 @@

    <

    For each acc in accountsList:

    1. -

      Let accState be the result of running the compute the connection status algorithm given provider and acc.

      -
    2. -

      If accState is connected, set registeredAccount to acc and increase numRegisteredAccounts by 1.

      +

      If acc is eligible for auto reauthentication given provider, and globalObject, +set registeredAccount to acc and increase numRegisteredAccounts by 1.

  • Let permission, disclosureTextShown, and isAutoSelected be set to false.

    @@ -1955,8 +1807,8 @@

    <

    If mediation is not "required", requiresUserMediation is false, and numRegisteredAccounts is equal to 1:

    1. -

      Set account to registeredAccount and accountState to the result of running compute the connection status algorithm given provider and account. When doing this, -the user agent MAY show some UI to the user indicating that they are being auto-reauthenticated.

      +

      Set account to registeredAccount and permission to true. When doing this, the user +agent MAY show some UI to the user indicating that they are being auto-reauthenticated.

    2. Set isAutoSelected to true.

    @@ -1968,15 +1820,10 @@

    <
  • Set account to accountsList[0].

  • -

    Set accountState to the result of running the compute the connection status algorithm -given provider, account, and globalObject.

    +

    If compute the connection status of account, provider and globalObject returns connected, show a dialog to request user permission to sign +in via account, and set the result in permission. The user agent MAY use options’s context to customize the dialog.

  • -

    If accountState is disconnected, -let permission be the result of running request permission to sign-up algorithm -with account, accountState, config, provider, and globalObject. Also set disclosureTextShown to true.

    -
  • -

    Otherwise, show a dialog to request user permission to sign in via account, and set the -result in permission. The user agent MAY use options’s context to customize the dialog.

    +

    Otherwise, let permission be the result of running request permission to sign-up algorithm with account, config, provider, and globalObject. Also set disclosureTextShown to true.

  • Otherwise:

    @@ -1986,18 +1833,15 @@

    <
  • If account is failure, return (failure, true).

  • -

    Set accountState to the result of running the compute the connection status algorithm -given provider and account.

    +

    If compute the connection status of account, provider and globalObject is connected, set permission to true.

  • -

    If accountState is disconnected:

    +

    Otherwise:

    1. Let permission be the result of running the request permission to sign-up algorithm with account, config, provider, and globalObject.

    2. Set disclosureTextShown to true.

    -
  • -

    Otherwise, set permission to true.

  • Wait until the user agent's dialogs requesting for user choice or permission to be @@ -2038,7 +1882,7 @@

    Let config, configInWellKnown both be null.

  • -

    Let rpOrigin be globalObject’s associated Document's origin.

    +

    Let rpOrigin be globalObject’s associated Document's origin.

  • If rpOrigin is not an opaque origin, and rootUrl’s host is equal to rpOrigin’s registrable domain, and rootUrl’s scheme is @@ -2270,16 +2114,16 @@

    USVString email; USVString given_name; USVString picture; - sequence<USVString> approved_clients; + sequence<USVString> approved_clients; sequence<DOMString> login_hints; sequence<DOMString> domain_hints; }; dictionary IdentityProviderAccountList { - sequence<IdentityProviderAccount> accounts; + sequence<IdentityProviderAccount> accounts; };

  • - To fetch the account picture given an IdentityProviderAccount account and a globalObject, run the following steps: + To fetch the account picture given an IdentityProviderAccount account and a globalObject, run the following steps:
    1. Let pictureUrl be the result of running parse url with account["picture"] and globalObject.

      @@ -2346,7 +2190,7 @@

      Let requestBody be the result of running urlencoded serializer with a list containing:

      1. -

        ("client_id", provider’s clientId)

        +

        ("client_id", provider’s clientId)

      2. ("nonce", provider’s nonce)

      3. @@ -2385,7 +2229,7 @@

        "webidentity"

        origin
        -

        globalObject’s associated document's origin

        +

        globalObject’s associated document's origin

        header list

        a list containing a single header with name set to Accept and value set to application/x-www-form-urlencoded

        @@ -2394,10 +2238,8 @@

        "include"

        mode
        -

        "no-cors"

        +

        "cors"

        -

        The spec is yet to be updated so that all requests are created -with mode set to "user-agent-no-cors". See the relevant pull request for details.

      4. Let credential be null.

      5. @@ -2429,14 +2271,14 @@

        2.3.8. Request permission to sign-up

        - To select an account given an accountsList, run the following steps. This returns an IdentityProviderAccount or failure. + To select an account given an accountsList, run the following steps. This returns an IdentityProviderAccount or failure.
        1. Assert accountsList’s size is greater than 1.

        2. Display an account chooser displaying the options from accountsList.

        3. -

          Let account be the IdentityProviderAccount of the account that the user +

          Let account be the IdentityProviderAccount of the account that the user manually selects from the accounts chooser, or failure if no account is selected.

        4. Return account.

          @@ -2446,7 +2288,7 @@

          - To request permission to sign-up the user with a given an IdentityProviderAccount account, + To request permission to sign-up the user with a given an IdentityProviderAccount account, an IdentityProviderAPIConfig config, an IdentityProviderRequestOptions provider, and a globalObject, run the following steps. This returns a boolean.
          1. @@ -2458,11 +2300,11 @@

          2. If metadata is not failure, metadata["privacy_policy_url"] -is defined and the provider’s clientId is not in the list of account["approved_clients"], then the user agent MUST display +is defined and the provider’s clientId is not in the list of account["approved_clients"], then the user agent MUST display the metadata["privacy_policy_url"] link.

          3. If metadata is not failure, metadata["terms_of_service_url"] -is defined, and the provider’s clientId is not in the list of account["approved_clients"], then the user agent MUST display +is defined, and the provider’s clientId is not in the list of account["approved_clients"], then the user agent MUST display the metadata["terms_of_service_url"] link.

          4. The user agent MAY use the context to customize the @@ -2485,7 +2327,7 @@

            If clientMetadataUrl is failure, return failure.

          5. -

            Let request be a new request as follows:

            +

            Let request be a new request as follows:

            url
            @@ -2507,19 +2349,19 @@

            "webidentity"

            origin
            -

            globalObject’s associated document's origin

            +

            globalObject’s associated document's origin

            header list

            a list containing a single header with name set to Accept and value set to application/json

            credentials mode

            "omit"

            -
            mode +
            mode

            "no-cors"

            -

            The spec is yet to be updated so that all requests are created -with mode set to "user-agent-no-cors". See the relevant pull request for details.

            +

            The spec is yet to be updated so that all requests are created +with mode set to "user-agent-no-cors". See the relevant pull request for details.

          6. Let metadata be null.

          7. @@ -2561,7 +2403,7 @@

          - To fetch request given a request request, globalObject, and an algorithm processResponseConsumeBody, run the following steps: + To fetch request given a request request, globalObject, and an algorithm processResponseConsumeBody, run the following steps:
          1. Queue a global task on the network task source given globalObject to:

            @@ -2587,7 +2429,7 @@

            If manifestUrl is failure, return failure.

          2. -

            If manifestUrl is not same origin with configUrl, return failure.

            +

            If manifestUrl is not same origin with configUrl, return failure.

          3. If manifestUrl is not a potentially trustworthy URL, return failure.

          4. @@ -2615,7 +2457,7 @@

          - To show an IDP login dialog given an IdentityProviderAPIConfig config, an IdentityProviderConfig provider, and a globalObject, run the following steps. This returns + To show an IDP login dialog given an IdentityProviderAPIConfig config, an IdentityProviderConfig provider, and a globalObject, run the following steps. This returns success or failure.
          1. @@ -2686,7 +2528,7 @@

            Exposed=Window, SecureContext] interface IdentityProvider { static undefined close(); - static Promise<sequence<IdentityUserInfo>> getUserInfo(IdentityProviderConfig config); + static Promise<sequence<IdentityUserInfo>> getUserInfo(IdentityProviderConfig config); };

            Decide whether IdentityProvider is the @@ -2699,7 +2541,7 @@

          Note that this kind of correlation is already possible without FedCM by using simple cross-origin top-level navigations, but using FedCM for this purpose would worsen the problem if it improved -timing resolution or if it was less visible to users (e.g. the IDP could return empty accounts +timing resolution or if it was less visible to users (e.g. the IDP could return empty accounts to the user agent to deliberately make no browser UI to be triggered, and hence make this attack invisible to the user).

          The user agent should mitigate this attack to protect users, in an interoperable way.

          @@ -3702,9 +3548,9 @@

          RP and an IDP are colluding to +

          In the context of federation, intrusion happens when an RP and an IDP are colluding to invasively and aggressively recommend the user to login disproportionally to the their intent. Much -like unsolicited notifications, an RP can collude with an IDP to aggressively log users in.

          +like unsolicited notifications, an RP can collude with an IDP to aggressively log users in.

          The user agent can mitigate this by mediating the user controls and offering them proportionally to the intent of the user or the privacy risks involved. For example, a user agent can choose to show a loud / disruptive modal mediated dialog when it has enough confidence of the user’s intent or @@ -3714,7 +3560,7 @@

          - + @@ -3768,7 +3614,7 @@

          - + @@ -3814,7 +3660,7 @@

          - + @@ -3833,20 +3679,20 @@

          +

          7.3.4. Cross-Site Correlation

          -

          This attack happens when multiple RPs collude to use their user’s data to correlate them and +

          This attack happens when multiple RPs collude to use their user’s data to correlate them and build a richer profile. When a user willingly provides their full name, email address, phone number, etc, to multiple relying parties, those relying parties can collaborate to build a profile of that user and their activity across collaborating sites. Sometimes this is referred to as joining since it amounts to a join of user records between the account databases of multiple RPs. This correlation and profile-building is outside the user’s control and entirely out of the user -agent’s or IDP’s view.

          +agent’s or IDP’s view.

          - + @@ -3893,7 +3739,7 @@

          - + @@ -3903,7 +3749,7 @@

          - + @@ -3920,7 +3766,7 @@

          - + @@ -3930,7 +3776,7 @@

          - + @@ -3942,7 +3788,7 @@

          - + @@ -3952,7 +3798,7 @@

          - + @@ -3972,7 +3818,7 @@

          - +

          @@ -3998,14 +3844,14 @@

          7.3.5. Unauthorized Data Usage

          -

          Another attack is when the RP or IDP uses user information for purposes not authorized by -the user. When the user agrees to allow the IDP to provide information to the RP, the -permission is specific to certain purposes, such as sign-in and personalization. For instance, the RP might use that data for other purposes that the user would not expect and did not authorize, +

          Another attack is when the RP or IDP uses user information for purposes not authorized by +the user. When the user agrees to allow the IDP to provide information to the RP, the +permission is specific to certain purposes, such as sign-in and personalization. For instance, the RP might use that data for other purposes that the user would not expect and did not authorize, such as selling email addresses to a spam list. Spamming risk can exist even when using directed identifiers.

          7.3.6. RP Fingerprinting

          -

          This attack happens when the RP employs client state-based tracking to identify user. Any +

          This attack happens when the RP employs client state-based tracking to identify user. Any API that exposes any kind of client state to the web risk becoming a vector for fingerprinting. The -purpose of this API is for the user to provide identification to the RP. And the user should be -able to rescind the access to that identification, for instance by logging out. However, a tracking RP could keep state to detect the user that was previously logged in:

          +purpose of this API is for the user to provide identification to the RP. And the user should be +able to rescind the access to that identification, for instance by logging out. However, a tracking RP could keep state to detect the user that was previously logged in:

          - + @@ -4265,27 +4111,27 @@

          - + - +

          7.3.7. Secondary Use

          Secondary use is the use of collected information about an individual without the individual’s perimssion for a purpose different from that for which the information was collected. This attack -happens when IDPs misuse the information collected to enable sign-in for other purposes.

          -

          Existing federation protocols require that the IDP know which service is requesting a token +happens when IDPs misuse the information collected to enable sign-in for other purposes.

          +

          Existing federation protocols require that the IDP know which service is requesting a token in order to allow identity federation. Identity providers can use this fact to build profiles of users across sites where the user has decided to use federation with the same account. This profile could be used, for example, to serve targeted advertisements to those users browsing on sites that the IDP controls.

          -

          This risk can exist even in the case where the IDP does not having pre-existing user account -information (for instance, if it is not a _bona fide_ IDP), because FedCM requests sent to the IDP are credentialed. This is more likely to occur if the RP is colluding with the IDP to enable tracking via § 7.3.2 Timing Attacks.

          +

          This risk can exist even in the case where the IDP does not having pre-existing user account +information (for instance, if it is not a _bona fide_ IDP), because FedCM requests sent to the IDP are credentialed. This is more likely to occur if the RP is colluding with the IDP to enable tracking via § 7.3.2 Timing Attacks.

          - + @@ -4311,7 +4157,7 @@

          - + @@ -4346,7 +4192,7 @@

          - + @@ -4387,8 +4233,8 @@

          - - + +

          @@ -4396,25 +4242,25 @@

          1. -

            User signs into RP1 (which sells jewelry) with an IDP.

            +

            User signs into RP1 (which sells jewelry) with an IDP.

          2. -

            User signs into RP2 (which sells houses) with the same IDP.

            +

            User signs into RP2 (which sells houses) with the same IDP.

          3. -

            User navigates to the IDP.

            +

            User navigates to the IDP.

          4. -

            Because the IDP knows that the user has an account with RP1 and RP2, the IDP can show ads about vacations for honeymoons.

            +

            Because the IDP knows that the user has an account with RP1 and RP2, the IDP can show ads about vacations for honeymoons.

          5. -

            The user is surprised that their IDP is aware of their plans to get +

            The user is surprised that their IDP is aware of their plans to get married.

        -

        Preventing tracking of users by the IDP is difficult: the RP has to be coded into the +

        Preventing tracking of users by the IDP is difficult: the RP has to be coded into the identity token for security reasons, such as token reuse and fraud and abuse prevention. There have -been cryptographic schemes developed to blind the IDP to the RP while still +been cryptographic schemes developed to blind the IDP to the RP while still preventing token reuse(see Mozilla’s personas). These schemes have not been adopted by this specification.

        - + @@ -4457,7 +4303,7 @@

        - + @@ -4500,7 +4346,7 @@

        - + @@ -4510,7 +4356,7 @@

        - +

        @@ -4518,6 +4364,40 @@

        Note: go over the extensibility mechanisms.

        9. Acknowledgements

        Note: write down the Acknowledgements section.

        +

        10. FPWD Issues

        + Note: The WG has labeled the following issues as critical open issues that must be formally addressed before publication of a Candidate Recommendation. +

  • Conformance

    @@ -4545,6 +4425,22 @@

    , like this:

    Note, this is an informative note.

    +
    +

    Conformant Algorithms

    +

    Requirements phrased in the imperative as part of algorithms + (such as "strip any leading space characters" + or "return false and abort these steps") + are to be interpreted with the meaning of the key word + ("must", "should", "may", etc) + used in introducing the algorithm.

    +

    Conformance requirements phrased as algorithms or specific steps + can be implemented in any manner, + so long as the end result is equivalent. + In particular, the algorithms defined in this specification + are intended to be easy to understand + and are not intended to be performant. + Implementers are encouraged to optimize.

    +

    Index

    @@ -4570,6 +4466,7 @@

    definition of, in § 3.2
  • dict-member for IdentityProviderBranding, in § 3.2 +
  • compute the connected account key, in § 2.2
  • compute the connection status, in § 2.2
  • computing the manifest URL, in § 2.3.9
  • config file, in § 3.2 @@ -4590,6 +4487,7 @@

    [[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors), in § 2.3.3
  • domainHint, in § 2.3.2
  • domain_hints, in § 3.3 +
  • eligible for auto reauthentication, in § 2.2
  • email -
  • NavigatorLogin, in § 2.1.3 +
  • NavigatorLogin, in § 2.1.4
  • nonce, in § 2.3.2
  • parse url, in § 2.3.9
  • @@ -4667,11 +4565,12 @@

    remove all connections, in § 2.2
  • request permission to sign-up, in § 2.3.8
  • RP, in § 1 +
  • same-site with its ancestors, in § 2.1.2
  • select an account, in § 2.3.8
  • send a disconnect request, in § 2.3.1.1
  • setdelayenabled, in § 5.8 -
  • Set-Login, in § 2.1.2 -
  • setStatus(status), in § 2.1.3 +
  • Set-Login, in § 2.1.3 +
  • setStatus(status), in § 2.1.4
  • set the login status, in § 2.1.1
  • show an IDP login dialog, in § 2.3.9
  • "signin", in § 2.3.2 @@ -4796,8 +4695,10 @@

    [HTML] defines the following terms:
    • Navigator +
    • active document
    • allowed to use
    • associated document +
    • browsing context
    • create a fresh top-level traversable
    • current global object
    • current settings object @@ -4806,14 +4707,18 @@

      in parallel
    • navigable
    • networking task source +
    • node navigable
    • opaque origin
    • origin
    • origin (for environment settings object) +
    • parent
    • permissions policy
    • queue a global task
    • realm +
    • relevant global object
    • relevant settings object
    • same origin +
    • same site
    • scheme
    • top-level origin
    • top-level traversable @@ -4856,6 +4761,11 @@

      default allowlist
    • policy-controlled feature
    +
  • + [PRIVATE-AGGREGATION-API] defines the following terms: +
      +
    • remote end steps +
  • [SECURE-CONTEXTS] defines the following terms:
      @@ -4892,7 +4802,6 @@

      error
    • extension commands
    • invalid argument -
    • remote end steps
    • success
  • @@ -4925,7 +4834,7 @@

    N
    [CLEAR-SITE-DATA]
    Mike West. Clear Site Data. URL: https://w3c.github.io/webappsec-clear-site-data/
    [CREDENTIAL-MANAGEMENT-1] -
    Nina Satragno. Credential Management Level 1. URL: https://w3c.github.io/webappsec-credential-management/ +
    Nina Satragno; Marcos Caceres. Credential Management Level 1. URL: https://w3c.github.io/webappsec-credential-management/
    [CSP]
    Mike West; Antonio Sartori. Content Security Policy Level 3. URL: https://w3c.github.io/webappsec-csp/
    [CSS-COLOR-4] @@ -4956,6 +4865,8 @@

    N
    Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
    [PRIVACY-THREAT-MODEL]
    Target Privacy Threat Model. URL: https://w3cping.github.io/privacy-threat-model/ +
    [PRIVATE-AGGREGATION-API] +
    Private Aggregation API. Unofficial Proposal Draft. URL: https://patcg-individual-drafts.github.io/private-aggregation-api/
    [RFC2119]
    S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC6973] @@ -5132,60 +5043,10 @@

    mode set to "user-agent-no-cors". See the relevant pull request for details.
    The spec is yet to be updated so that all requests are created with mode set to "user-agent-no-cors". See the relevant pull request for details.
    -
    The spec is yet to be updated so that all requests are created -with mode set to "user-agent-no-cors". See the relevant pull request for details.
    Decide whether IdentityProvider is the correct location for the getUserInfo() method.
    Clarify the IDP API response when the user is not signed in.
    -
    - MDN -
    -

    IdentityCredential/token

    -

    In only one current engine.

    -
    - FirefoxNoneSafariNoneChrome108+ -
    - Opera?Edge108+ -
    - Edge (Legacy)?IENone -
    - Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile? -
    -
    -
    -
    - MDN -
    -

    IdentityCredential

    -

    In only one current engine.

    -
    - FirefoxNoneSafariNoneChrome108+ -
    - Opera?Edge108+ -
    - Edge (Legacy)?IENone -
    - Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile? -
    -
    -
    -
    - MDN -
    -

    Headers/Permissions-Policy/identity-credentials-get

    -

    In only one current engine.

    -
    - FirefoxNoneSafariNoneChrome110+ -
    - Opera?Edge110+ -
    - Edge (Legacy)?IENone -
    - Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile? -
    -
    -
    -