This document is a member submission following discussions within the Tracking Protection Working Group and does not constitute working group consensus. Text in option boxes (highlighted with light blue background color) present options that the group is currently considering, particularly where consensus is known to be lacking, and should be read as a set of proposals rather than as limitations on the potential outcome. An issue tracking system is available for recording raised, open, pending review, closed, and postponed issues regarding this document.
The key words must, must not, required, should, should not, recommended, may, and optional in this specification are to be interpreted as described in [[!RFC2119]].
This specification uses the Augmented Backus-Naur Form (ABNF) notation of [[!RFC5234]] to define network protocol syntax and WebIDL [[!WEBIDL]] to define scripting APIs. Conformance criteria and considerations regarding error handling are defined in Section 2.5 of [RFC7230].
This section is not normative.
Work in the TPWG (Tracking Protection Working Group) has identified a requirement for a way that the Do Not Track consent signal, otherwise known as the User Granted Exception (UGE), can be set or examined by client-side script for Origins other than the effective script origin. In order to not weaken security, or create another vector enabling device fingerprinting, this should be restricted to other Origins belonging to, or those managed by recognised service providers of, the administrator of the current page. Common use-cases are:
An organisation manages many similar sites, such as different brand sites owned by a single consumer product company. If consent is obtained for tracking on one site it should not be necessary for solely technical reasons to repeatedly ask for consent when the user visits other brand sites. There may be reasons to repeat consent requests for different styles of sites, i.e. a user may agree to be tracked on food product sites but not on medical product ones, but this should be a function of the explanation given in text on the page and not arbitrarily limited by the constraints due to the implementation of the Same Origin Policy. If users are needlessly bombarded with consent requests they could find this irriating, avoid using the requesting application.
Often a single website is implemented using resources on multiple Origins. Some resources may be addressed via the https protocol, others by http. At other times the resources may be addressed via different subdomains or entirely different domains, or on different Top Level Domains. It should not be required that consent has to established via script loaded, say using an iframe tag, in each of these Origins. In order to avoid repeatedly asking the user for consent complex cross-origin signaling mechanisms would have to be implemented.
A publisher may wish to show contextual or consensual behavioral advertising while respecting DNT, but retain the ability to retarget those users later on other sites via a third-party service provider. The publisher should be able to request explicit consent from a user for this activity and then be capable of enabling a DNT UGE for the Origins of specially contracted service providers, in a granular fashion.
An advertising exchange may initiate a bidding process for particular audience categories of users in a server-server transaction. The downstream bidders in this case are not accessed by HTML content on the page so cannot directly determine their own DNT consent status. The ad exchange should be able to contract itself as a service provider to the host page administrator as well as to the downstream bidders, and ascertain itself their DNT consent status. It can then efficiently build this information into the bidding process without having to disregard DNT by broadcasting the PII of DNT users.
Similar use-cases can be imagined for other APIs which convey or request client settings, such as the forthcoming Permission API. If a company asks a user for permission to receive, say, geolocation data it should not be necessary for simple technical reasons for this to be limited to a single Origin. It should be possible, with user agreement, to examine the Permission settings of particular service providers, or apply settings to other Origins used by the application.
When client-side script requests a change to an important setting, such as the Do Not Track web-wide exception setting, it should be possible to check the identity of the party responsible for the script. Simply reporting the host domain of the effective script origin could be inadequate in many situations. This document defines a declaritive mechanism so that the Operator, or the organisation, company or individual responsible for a web resource, can declare itself, and be associated with the current effective script Origin.
The Same Origin Policy is an important aspect of the web application security model. In order to retain this security the relationships between Origins need to be specified securely in an open and transparent, and therefore declarative way. When an API (i.e. DNT UGE) supports this kind of cross-origin setting or confirmation only Origins that refer to each other should be allowed to take part.
This document defines Operator Identity (SI), a mechanism that web applications can use to deliver a machine and human readable description of the website server administrator, i.e. the person, company or organisation legally responsible for website operation. An Operator Identity Descriptor is a declarative description that informs clients of properties that identify the website Operator, and optionally properties indicating other host origins it manages, the host origins of service providers it has contracted with, and the host origins of resources where it acts as a service-provider. .
In responses to clients a web application resource supplies an Operator Identity Descriptor in an HTTP header, or as the content of an HTML <meta> element in an HTML response body. This Operator Identity Descriptor describes the administrator of the current resource representation only. To supply an Operator Identity for an entire site, the server needs to supply a descriptor with each resource representation.
Only the first indication of an Operator Identity is valid. Subsequent versions in further response headers or meta tags are ignored.
On detection of an Operator Identity Descriptor a client will immediately parse it to create an OperatorID JSON object which includes all the properties defined in it. This object is referenced by the document.OperatorID property. Once an OperatorID object has been defined, any subsequent Operator Identity Descriptors are ignored. An internal representation of the OperatorID is cached so it is immediately available when this resource is referred to by a suporting API.
Operator-Identity: name Publisher Inc.; uses https://advertise.com https://search.com; controls https://daily-record.ie https://thebeano.co.uk;
"Operator-Identity:" 1#operator-token
meta
Element
The server MAY supply an Operator Identity Descriptor in an HTML meta
element with an http-equiv
attribute that
is a case insensitive match for the string
"Operator-Identity
". For example:
<meta http-equiv="Operator-Identity" content="name Publisher Inc.; uses https://advertise.com https://search.com; controls https://daily-record.ie https://thebeano.co.uk">Add the following entry to the pragma directives for the
meta
element:
http-equiv="operator-identity"
)
Authors are strongly encouraged to place the
meta
element as early in the document as
possible to reduce the risk of content injection before an Operator Identity Descriptor can be read and registered.
Note: If an Operator Identity header is present the meta
tag is ignored, otherwise only the first operator specified via a meta
element will be registered.
Note: Modifications to the content
attribute of a meta
element after the
element has been parsed will be ignored.
operator-token = [ property-token *( ";" [ property-token ] ) ] property-token = *WSP [ property-name [ WSP property-value ] ] property-name = 1*( ALPHA / DIGIT / "-" property-value = *( WSP / <VCHAR except ";" and ","> )
Some SI properties use a value consisting of an Other Origin Resource List, defined in the [[ABNF]] grammar below.
resource-list = *WSP [ source-expression *( 1*WSP source-expression ) *WSP ] resource-expression = scheme-origin / host-origin scheme-origin = scheme-part ":" host-origin = [ scheme-part "://" ] host-part [ port-part ] [ path-part ] scheme-part = <scheme production from RFC 3986, section 3.1> host-part = "*" / [ "*." ] 1*host-char *( "." 1*host-char ) host-char = ALPHA / DIGIT / "-" port-part = ":" ( 1*DIGIT / "*" ) path-part = <path production from RFC 3986, section 3.3>
The host-char
production intentionally contains only ASCII characters; internationalised domain names cannot be entered directly into a
policy string, but instead MUST be Punycode-encoded [RFC3492].
For example, the domain üüüüüü.de
would be encoded as xn
--tdaaaaaa.de
.
Each resource expression in the Other Origin Resource List represents a web accessable resource. An HTTP request with GET or OPTIONS Method
to this resource must either:
<meta> tag
.
name
The name of the website Administrator i.e. a human readable string that identifies the person, company or organisation that owns or is legally responsible for managing the website. An association, corporation, partnership, proprietorship, trust, or individual that has legal standing in the eyes of law.
uses
An Other Origin Resource List representing Origins controlled by service-providers that have contracted with this Operator.
services
An Other Origin Resource List representing the Origins of site Operators that have contracted with this Operator in its role as service-provider.
controls
An Other Origin Resource List representing other Origins controlled by this Administrator.
An client-side API can support cross-origin communication by defining a parameter or an object property identifying other Origins. This API can then use the OperatorID object to determine if the other Origins referred to have properly formatted Operator Identities of their own, and that they refer to the Origin representing the effective script origin of the document that called the API.
If the current document does not have a defined OperatorID, processing terminates and the access to the other Origin disallowed.
Otherwise, the current OperatorID is examined to check that the specified other Origins are referred to in the uses
or controls
Other Origin Resource List.
The OperatorID of each specified other Origin is obtained, either from a local cache or by requesting the resource with an HTTP OPTIONS method. The returned Operator Identity Descriptor is parsed to create an OperatorID object for the resource, which should be cached.
If the specified other Origin is referred to on a uses
list, the other OperatorID is checked for a referral to a resource in a
services
list with an Origin equivalent to the current effective script origin. If there is no such back-referral, processing terminates and the access
to the other Origin disallowed.
If a specified other Origin is on a controls
list, the other OperatorID is checked for a referral to a resource in its own
controls
list with the Origin as the current effective script origin. If there is no such back-referral, processing terminates and the access
to the other Origin disallowed, otherwise access is allowed.
Different access rights can be given to APIs according to whether they refer to service-provider Origins or other Operator managed websites.
For example the TPWG TPE ConfirmWebWideTrackingException could allow script to read the DNT status of a site's service providers
( i.e. the Origins specified by the uses
property ), while the StoreWebWideTrackingException
would only allow granting of exceptions for Origins on the controls
list, i.e. they represented resources controlled
by the same Operator.