Operator Identity

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.

Terminology

Notational Conventions

Requirements

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]].

Formal Syntax

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].

Introduction

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:

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;

Syntax and Algorithms

Header syntax

            "Operator-Identity:" 1#operator-token
            

3.3 HTML 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:
Operator Identity (http-equiv="operator-identity")
  1. If the Document’s head element is not an ancestor of the meta element, abort these steps.
  2. If the meta element lacks a content attribute, abort these steps.
  3. Let operator be the value of the content attribute of the meta element.
  4. Let operator-set be the result of parsing operator.

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 Identity Syntax

            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 ","> )
            

Other Origin Resource List Syntax

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:

Properties

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.

Processing Model.

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.