[@@ from charter]

The Linked Web Storage Protocol specification aims to provide applications with secure and permissioned access to externally stored data in an interoperable way.

The Linked Web Storage Protocol does/does not include protocol details for integration with identity layers and mechanisms; access management and data integrity; notifications about resource changes; and authorization mechanisms.

This is an unofficial proposal.

For Editors

List of TODOs and ideas in flux to enable editors to communicate asynchronously.

Resources

Tactics

Document Conventions

Introduction

This specification defines the Linked Web Storage (LWS) Protocol, which enables client applications to access and manage web resources, based on the identity and permissions of an agent.

By standardizing how a resource server manages and provides access to a hierarchy of linked resources, the protocol enables users to use different client applications to interact with the same stored data. These linked resources are defined through containers and containment relationships that describe where things are located, and metadata that describes how the resources relate to each other.

The protocol defines standard operations on these resources to create, read, update, and delete. Each resource is identified by a URI. A client navigates the resource hierarchy from a root container, discovering contained resources and their relations through links provided in server responses.

A agent's identity is confirmed through an identity provider that can be external to the Linked Web Storage server. This loose coupling means the server does not necessarily manage credentials directly; rather, it can receive and validate a signed authentication credential as a token issued by a trusted identity provider. A user can therefore present an existing identity to a compliant server, without always needing a new or existing account just for that server. LWS makes use of user authentication as defined in specifications for OpenID Connect, SAML 2.0, and self-signed controlled identifiers (CIDs), for example.

Authorization determines whether a requesting agent has permission to access a resource or perform an operation on it. A compliant LWS server designates a resource manager for each resource that determines whether a resource is private (i.e., available only to its owner), restricted (i.e., available to a defined set of users), or public (i.e., available to any user). The server enforces the access decisions of the resource manager when handling each client request.

This specification is intended to be used by:

Different LWS server instances each maintain their own hierarchy of linked resources. An agent might use the same identification to navigate across servers, with access to each server's resources determined by the permissions granted by that server's resource managers. It is not guaranteed that every LWS server instance will support every possible agent identifier; any given LWS server instance might require that an agent identify itself via a particular identity provider, to gain access to resources managed by that server instance.

Resource Access

The LWS Protocol defines standard interactions by which some party can make some resources available to some agents.

Security and Privacy

A resource manager may keep a served resource private, may make it publicly available to anyone, or may limit its visibility to a constrained set of requesting agents.

A LWS Server is an HTTP server [[!rfc9112]] that complies with all of the relevant "MUST" statements in this specification. Specifically, the relevant normative "MUST" statements in of this document MUST be respected.

An LWS Client is an HTTP client [[!rfc9112]] that complies with all of the relevant "MUST" statements in this specification. Specifically, the relevant normative "MUST" statements in of this document MUST be respected.

Scope Diagrams

The following diagrams are platform-independent models to guide implementation.

Figure: System Context shows the LWS System and its major components
System Context shows the LWS System and its major components.

Terminology

The terms "authorization server" and "client" are defined by the OAuth 2.0 Authorization Framework [[!RFC6749]].

The terms "end-user" and "issuer" are defined by OpenID Connect Core 1.0 [[!OPENID-CONNECT-CORE]].

This specification defines the following terms:

This specification defines operations on served resources, the resulting change of state, and a response intended to give the requesting agent requested information or inform them of the outcome of the operation. An operation is any of the following actions that can be performed on a served resource:

The following section will describe the semantics and responses of these operations but the following core responses apply to any operation:

Authentication

Authorization

Discovery

Logical Resource Organization

Containers

Operations

Create resource

Read resource

Update resource

Delete resource

Notifications

Access Requests and Grants

LWS Media Type

JSON-LD Context

Resource Identification

Define how resources are identified and addressed within the LWS Protocol, including URI schemes, resource naming conventions, and resolution mechanisms. This section may be moved within another section; e.g. Resource Access

Portability Considerations

Describe considerations for ensuring LWS implementations can work across different platforms, environments, and storage backends while maintaining interoperability - and provide affordances to enable change in storage providers

Security Considerations

Formal security considerations section covering threat models, security requirements, and implementation guidance for secure LWS deployments.

Privacy Considerations

Privacy implications of the LWS Protocol, including data minimization, user consent, and privacy-preserving implementation patterns.

IANA Considerations

Acknowledgements

This specification draws heavily from the Solid Protocol [[Solid-Protocol]], which was edited, over time, by Sarven Capadisli, Tim Berners-Lee, Kjetil Kjernsmo, Ruben Verborgh, Justin Bingham, Dmitri Zagidulin.