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.
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 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.
- To compute the connection status given an IdentityProviderConfigprovider, an IdentityProviderAccountaccount, and a globalObject, run the following steps. This returns connected or disconnected.
+
+ To compute the connected account key given an IdentityProviderConfigprovider, an IdentityProviderAccountaccount, and a globalObject, run the following steps. It returns a
+triple of the form (rp, idp, account).
-
+ When asked whether an IdentityProviderAccountaccount is eligible for auto reauthentication given an IdentityProviderConfigprovider and a globalObject, run the following steps. This returns a boolean.
+
+
+ When asked to compute the connection status given an IdentityProviderAccountaccount, an IdentityProviderConfigprovider and a globalObject, run the following steps.
+This returns connected or disconnected.
+
+
- To create a connection between the RP and the IdP account given an IdentityProviderConfigprovider, an IdentityProviderAccountaccount, and a globalObject (the RP's), run the following steps:
+ To create a connection between the RP and the IdP account given an IdentityProviderConfigprovider, an IdentityProviderAccountaccount, and a globalObject (the RP's), run the following steps:
Let configUrl be the result of running parse url with provider’s configURL and globalObject.
Let idpOrigin be the origin corresponding to configUrl.
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:
-
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.
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.
- To fetch the account picture given an IdentityProviderAccountaccount and a globalObject, run the following steps:
+ To fetch the account picture given an IdentityProviderAccountaccount and a globalObject, run the following steps:
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:
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.
Let credential be null.
@@ -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.
Let account be the IdentityProviderAccount of the account that the user
manually selects from the accounts chooser, or failure if no account is selected.
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.
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.
The user agent MAY use the context to customize the
@@ -2485,7 +2327,7 @@
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.
Let metadata be null.
@@ -2561,7 +2403,7 @@
- To fetch request given a requestrequest, globalObject, and an algorithm processResponseConsumeBody, run the following steps:
+ To fetch request given a requestrequest, globalObject, and an algorithm processResponseConsumeBody, run the following steps:
show an IDP login dialog algorithm for more details.
An IdentityUserInfo represents user account information from a user. This information is exposed
to the IDP once the user has already used the FedCM API to login in the RP. That is, it is
-exposed when there exists an account account such that the connected accounts setcontains the triple (RP, IDP, account). The information matches what is received from the accounts endpoint. The IDP can obtain this information by invoking the getUserInfo() static method from an iframe matching the origin of its configURL.
Note: this allows the IDP to override whether an account is a returning account.
This could be useful for instance in cases where the user has disconnected the
account out of band.
3. <
to execute these in such a way that it does not allow the user to be tracked (by an attacker
impersonating an IDP) on to the site using FedCM. The following table has information about the
network requests performed:
-
A list of RPs (that gets matched against the requesting clientId) this account is already registered with.
+
A list of RPs (that gets matched against the requesting clientId) this account is already registered with.
Used in the request permission to sign-up to allow the IDP to control whether to show
the Privacy Policy and the Terms of Service.
login_hints, of type sequence<DOMString>
@@ -3128,7 +2969,7 @@
An IDP MUST check the Origin header to ensure that a malicious RP does
not receive an ID token corresponding to another RP. In other words, the IDP MUST check that
-the Origin header value is represented by the clientId. As the clientId are IDP-specific, the user agent cannot perform this check.
Every IdentityProviderToken is expected to have members with the following semantics:
@@ -3155,14 +2996,14 @@
3.6. Disconnect endpoint
The disconnect endpoint is responsible for disconnecting a previously made federated
-login connection between an RP and an IDP account, and returning the account’s id so that the user agent can remove it from the connected accounts set.
(a) as a POST request,
(b) withIDP cookies,
(c) with the RP's origin in the Origin header,
(d) with the Sec-Fetch-Dest header set to webidentity,
(e) without following HTTP redirects, and
-(f) in "cors" mode.
The IDP must return the account_id since it may be different from the account_hint, and the ID is the one which allows the user agent to disconnect the account from the connected accounts set. If the IDP returns an error or
the user agent does not find the account with the ID provided by the IDP, then all accounts
-associated with the relevant (RP, IDP) are removed from the connected accounts set.
If the user agent uses a cooldown delay, which disables the API for an
@@ -3509,14 +3350,19 @@
IDP endpoints.
-
6.3. Browser Surface Impersonation
+
6.3. CORS Header
+
The FedCM API allows the response from the identity assertion endpoint to be shared to the RP. Because of this, we impose the requirement that the IDP explicitly consents to this
+sharing taking place by using the "cors" mode when fetching this endpoint. This also
+helps with servers that may accidentally ignore the Sec-Fetch-Dest: they cannot
+ignore CORS, as without it the fetch will fail.
+
6.4. Browser Surface Impersonation
The FedCM API introduces new (trusted) user agent UI, and the user agent may choose to show the UI
entirely on top of the page’s contents, if anything because the page was the one responsible for
this UI. This introduces a potential concern of a malicious site to try to replicate the FedCM UI,
gain the user’s trust that the user is interacting with a trusted browser surface, and gather
information from the user that they would only give to the browser rather than the site (e.g.
usernames/passwords of another site). This would be hard to achieve because the FedCM UI uses
-metadata about the user accounts of the IDP, which the malicious website doesn’t have access to.
+metadata about the user accounts of the IDP, which the malicious website doesn’t have access to.
If this is a malicious site, it would not know the user accounts unless the user is already
compromised. However, the site could have some guess of the user identity, so the browser is
encouraged to provide UI that is hard to replicate and that clearly presents the domains of the
@@ -3536,22 +3382,22 @@
-
The user agent implements § 2 The Browser API and controls the execution contexts for the RP and IDP content. The user agent is assumed to be trusted by the user, and transitively
-trusted by the RP and IDP.
+
The user agent implements § 2 The Browser API and controls the execution contexts for the RP and IDP content. The user agent is assumed to be trusted by the user, and transitively
+trusted by the RP and IDP.
-
RPs are websites that invoke the FedCM API for the purpose of
+
RPs are websites that invoke the FedCM API for the purpose of
authenticating a user to their account or for requesting information about that user. Since any
-site can invoke the API, RPs cannot necessarily be trusted to limit the user information it
+site can invoke the API, RPs cannot necessarily be trusted to limit the user information it
collects or use that information in an acceptable way.
-
IDPs are third-party websites that are the target of a FedCM call to
-attempt to fetch a token. Usually,the IDP has a higher level of trust than the RP since it already has the user’s personal information, but it is possible that the IDP might use the user’s information in non-approved ways. In addition, it is possible that the IDP specified in the API call may not be an IDP the user knows about. In this case, it
+
IDPs are third-party websites that are the target of a FedCM call to
+attempt to fetch a token. Usually,the IDP has a higher level of trust than the RP since it already has the user’s personal information, but it is possible that the IDP might use the user’s information in non-approved ways. In addition, it is possible that the IDP specified in the API call may not be an IDP the user knows about. In this case, it
likely does not have personal user information in advance.
-
A tracker is a third-party website that is not an IDP but could abuse the FedCM API
+
A tracker is a third-party website that is not an IDP but could abuse the FedCM API
exclusively for the purpose of tracking a user as they visit various websites. A tracker may
-be injected by the RP with or without their knowledge (e.g. injected into one of the various
-script tags that the RP embeds that is loaded dynamically), but they usually do not modify
+be injected by the RP with or without their knowledge (e.g. injected into one of the various
+script tags that the RP embeds that is loaded dynamically), but they usually do not modify
the UI of the website, so that it is harder to detect the tracking. A tracker that
successfully adds tracking scripts for users in various websites may then use this information
for various purposes, such as selling the information about the user. It should not be possible
@@ -3560,21 +3406,21 @@
Based on the above, the privacy discussion makes the following assumptions:
-
It is not acceptable for an RP, IDP, or tracker to learn that a specific user visited a
+
It is not acceptable for an RP, IDP, or tracker to learn that a specific user visited a
specific site, without any permission granted by the user. That is, the user agent needs to hide the
-knowledge that a specific user identity visited a specific site from the RP, IDP, and trackers. It may share this knowledge with the RP and IDP once the user grants permission. In
-particular, the RP should not know the user identity and the IDP should not know the
+knowledge that a specific user identity visited a specific site from the RP, IDP, and trackers. It may share this knowledge with the RP and IDP once the user grants permission. In
+particular, the RP should not know the user identity and the IDP should not know the
site that the user has visited before the FedCM flow gathers the user’s permission to do so.
-
It is the user agent's responsibility to determine when the user has granted permission for the IDP to communicate with the RP in order to provide identification for the user.
+
It is the user agent's responsibility to determine when the user has granted permission for the IDP to communicate with the RP in order to provide identification for the user.
Once the user agent has determined that the user has granted permission to provide their
-account information to the RP, it is ok for the IDP and for the RP to learn
-information about that specific user’s account, as required to provide identification. The RP should not learn about about any other user accounts.
+account information to the RP, it is ok for the IDP and for the RP to learn
+information about that specific user’s account, as required to provide identification. The RP should not learn about about any other user accounts.
7.2. Network requests
This specification ensures that the FedCM fetches are all same-origin with respect to the provider specified
-by the RP. The reason for this is because fetches with cookies would use the cookies from the
+by the RP. The reason for this is because fetches with cookies would use the cookies from the
origin specified, so allowing arbitrary origins would introduce confusion and potential privacy
issues with regards to which cookies are shared and with whom within the FedCM flow. The easiest way
to ensure that all of these fetches remain same-origin is by disabling redirects and checking the
@@ -3585,49 +3431,49 @@
accounts endpoint fetch can’t be used to track users because it is performed with cookies from the IDP but, importantly, without the client_id or referrer. This in theory is a new power
-that the RP gains that it would not have otherwise. Preventing too many of these fetches may
-be important, but IDPs are already expected to protect against DoS attacks. In addition, the
+
The accounts endpoint fetch can’t be used to track users because it is performed with cookies from the IDP but, importantly, without the client_id or referrer. This in theory is a new power
+that the RP gains that it would not have otherwise. Preventing too many of these fetches may
+be important, but IDPs are already expected to protect against DoS attacks. In addition, the
user agent should only allow one FedCM flow per page at any given moment, immediately rejecting
any attempts to start another one. Since a FedCM flow can only be terminated when the user
-interacts or after a long timer, the number of fetches performed is not a concern. The IDP does learn a lot about the user from this fetch, but this is discussed in detail below.
+interacts or after a long timer, the number of fetches performed is not a concern. The IDP does learn a lot about the user from this fetch, but this is discussed in detail below.
The client metadata endpoint fetch can’t be used to track users too because it is performed without cookies
-from the IDP, albeit with a client_id and a referrer. This allows the IDP to
+from the IDP, albeit with a client_id and a referrer. This allows the IDP to
communicate the relevant Privacy Policy and Terms of Service to the user agent, in case
-they need to be displayed. Again, besides possible timing attacks described here, the RP gains nothing from this fetch, and the RP could already perform this fetch if it wanted to
-since it involves no cookies from the IDP.
+they need to be displayed. Again, besides possible timing attacks described here, the RP gains nothing from this fetch, and the RP could already perform this fetch if it wanted to
+since it involves no cookies from the IDP.
-
By design, the token fetch exposes the user at the website to the IDP: it is
+
By design, the token fetch exposes the user at the website to the IDP: it is
peformed with cookies, client_id, and referrer. Because of that, it is gated on the user
-interacting with the user agent UI, and enables the IDP to communicate to the RP the
-information required to perform a federated signin/signup. It is not possible for the RP or
-the IDP to force the token fetch to happen without user permission, as the user agent cannot be
+interacting with the user agent UI, and enables the IDP to communicate to the RP the
+information required to perform a federated signin/signup. It is not possible for the RP or
+the IDP to force the token fetch to happen without user permission, as the user agent cannot be
spoofed or otherwise tricked.
The disconnect endpoint may only be fetched after the user has successfully gone through the
-FedCM flow at least once in the RP. It sends a credentialed request to the IDP, so it
+FedCM flow at least once in the RP. It sends a credentialed request to the IDP, so it
is important that the user agent does not allow unlimited requests of such type, even after
the user has used FedCM once. For this reason, any time that disconnection sends a credentialed
-request, at least one account is removed from the connected accounts set, thus ensuring that
-this endpoint does not introduce a way for the RP to send requests to the IDP containing
-the IDP cookies forever.
+request, at least one account is removed from the connected accounts set, thus ensuring that
+this endpoint does not introduce a way for the RP to send requests to the IDP containing
+the IDP cookies forever.
7.3. Attack Scenarios
This section describes the scenarios in which various agents might attempt to gain user information.
It considers the possibilities when:
For the purposes of this section, a principal is considered to be participating in the collection of
information if it directly or indirectly performs actions with the aim of realizing one of the above
threats.
-
Note: An example of indirect collusion would be an RP importing a script supplied by an IDP where the IDP intends to track users.
+
Note: An example of indirect collusion would be an RP importing a script supplied by an IDP where the IDP intends to track users.
For the purpose of discussion, this document assumes that third-party cookies are disabled by
default and are no longer effective for use in tracking mechanisms, and also some form of
mitigations are implemented against ‘bounce tracking’ using link decoration or postMessage. Most of
@@ -3648,21 +3494,21 @@
NOTE: You can read more about the attack described here.
-
Here, the RP includes identifies itself when fetching the manifest from the IDP. This
-coupled with the credentialed fetches that the FedCM API performs would enable the IDP to easily
+
Here, the RP includes identifies itself when fetching the manifest from the IDP. This
+coupled with the credentialed fetches that the FedCM API performs would enable the IDP to easily
track the website that the user is visiting, without requiring any permission from the user. Our
mitigation to this problem is to use the § 3.1 The Well-Known File file. The existence of a file at
-the root of the IDP's domain is enforced to ensure that the file name does not introduce
-fingerprints about the RP being visited.
+the root of the IDP's domain is enforced to ensure that the file name does not introduce
+fingerprints about the RP being visited.
The whole manifest could be in this location, but instead it only points to the real
manifest from there. This allows the flexibility in the future to allow a small constant
-number of manifests, should an IDP require this in the future, instead of just a single one. It
-also helps the IDP's implementation because they any changes to the manifest are more likely to
+number of manifests, should an IDP require this in the future, instead of just a single one. It
+also helps the IDP's implementation because they any changes to the manifest are more likely to
be performed on a file located anywhere, as opposed to the root of the domain, which may have more
constraints in terms of ease of update.
7.3.2. Timing Attacks
-
In the timing attack, the RP and IDP collude to allow the IDP to compute the (RP's
-origin, IDP's user identity) pair without the user’s permission. This attack is not deterministic:
+
In the timing attack, the RP and IDP collude to allow the IDP to compute the (RP's
+origin, IDP's user identity) pair without the user’s permission. This attack is not deterministic:
there is room for statistical error because it requires stitching together two separate pieces of
information to track the user. However, it is important to mitigate this attack and ensure that
it’s economically impractical to perform. In this attack, it is assumed that network requests do not
@@ -3674,20 +3520,20 @@
RP logs the time at which it invokes the API, time A and sends it to the IDP to
-learn itself by marking the time in which it receives the fetch for the RP's client
+
The RP logs the time at which it invokes the API, time A and sends it to the IDP to
+learn itself by marking the time in which it receives the fetch for the RP's client
metadata. Time A is tied to the site.
-
A credentialed request is sent to the IDP that does not explicitly identify the RP, but
-it is sent around a time that is close enough to the request above. The IDP notes the time
+
A credentialed request is sent to the IDP that does not explicitly identify the RP, but
+it is sent around a time that is close enough to the request above. The IDP notes the time
in which this request has arrived, time B. Time B is tied to the user identity.
-
The IDP correlates time A and time B to find the (site, user identity) pair with high
+
The IDP correlates time A and time B to find the (site, user identity) pair with high
probability. Note that fingerprinting can make the correlation more accurate.
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.
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 @@
-
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.
RPs joining user data via back-channels is inherent to the proliferation of
+
The problem of RPs joining user data via back-channels is inherent to the proliferation of
identifying user data. This can be solved by issuing directed identifiers that provide an
-effective handle to a user’s identity with a given IDP that is unique and therefore cannot be
-correlated with other RPs. In the past, there have been schemes to accomplish this using one-way
-hashes of, for example, the user’s name, the IDP, and the RP. These identifiers would be
-unique, and hence it would not be possible to correlate these with other RPs.
+effective handle to a user’s identity with a given IDP that is unique and therefore cannot be
+correlated with other RPs. In the past, there have been schemes to accomplish this using one-way
+hashes of, for example, the user’s name, the IDP, and the RP. These identifiers would be
+unique, and hence it would not be possible to correlate these with other RPs.
-
+
@@ -4043,7 +3889,7 @@
-
+
@@ -4083,7 +3929,7 @@
-
+
@@ -4132,7 +3978,7 @@
-
+
@@ -4141,7 +3987,7 @@
-
+
@@ -4208,24 +4054,24 @@
-
+
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 @@
-
User signs into RP1 (which sells jewelry) with an IDP.
+
User signs into RP1 (which sells jewelry) with an IDP.
-
User signs into RP2 (which sells houses) with the same IDP.
+
User signs into RP2 (which sells houses) with the same IDP.
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.
-
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.
+
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.