Fact-checked by Grok 2 weeks ago

WebFinger

WebFinger is a that enables the discovery of information about people or other entities on the using standard HTTP methods over , primarily through queries based on URIs such as addresses or account identifiers. Defined in 7033 and published by the (IETF) in September 2013, it allows clients to retrieve static about a resource, such as profile details, associated services, or alternative identifiers, without requiring prior knowledge of the entity's location. The protocol operates by directing clients to send a GET request to the /.well-known/webfinger on the host derived from the target , including a resource parameter specifying the entity (e.g., acct:username@[example.com](/page/Example.com)) and optionally a rel parameter to filter for specific link relations. Servers respond with a Resource Descriptor (JRD), a structured document containing the subject's , aliases (alternative URIs), properties (key-value pairs like names or photos), and links to related with types defined by the Link Relations registry. This design supports decentralized discovery across domains, facilitating interoperability in applications like social networking, , and federated services, while mandating for transport to ensure security. Key features include support for (CORS) to allow browser-based queries, redirection for hosted services, and extensibility via the properties and links in JRDs, though it explicitly excludes dynamic or to maintain simplicity and boundaries. Security considerations emphasize the use of valid TLS certificates, to prevent abuse, and user consent for published information, as exposure of personal details can lead to risks or spam harvesting. Developed by Paul E. Jones, Gonzalo Salgueiro, Michael B. Jones, and Joseph Smarr, WebFinger builds on earlier discovery mechanisms like LRDD but standardizes them into a single, RESTful interface for broader adoption.

Overview

Definition and purpose

WebFinger is a protocol defined in RFC 7033 that enables the discovery of information about people or other entities on the through standard HTTP methods, primarily using in the form of "acct:" URIs or email addresses. It operates by allowing clients to query a server's well-known , typically via , to retrieve static metadata associated with the identifier, without requiring direct access to the entity's location on the web. The core purpose of WebFinger is to facilitate decentralized discovery of public profile information, contact details, or other , avoiding the need for centralized directories or systems. By leveraging , it promotes among diverse services such as social networks, providers, and systems, enabling users to share and access information across platforms in a standardized manner. This approach supports broader goals of decentralized on the , where entities can expose links to resources like profile pages without relying on siloed APIs. WebFinger draws conceptual inspiration from earlier user discovery mechanisms, including the UNIX "finger" protocol and integrations with systems like OpenID for simplifying identity lookups. It has been adapted for use in OpenID Connect to dynamically discover identity providers based on user identifiers. The protocol returns results in a JSON Resource Descriptor (JRD) format, which encapsulates links and properties related to the queried entity.

Key concepts

WebFinger relies on the acct: URI scheme to identify users and entities in a standardized manner. The format is acct:[user](/page/User)@host, where "" represents the local identifier and "" is the , providing a URI-based reference that is distinct from addresses despite superficial similarity, as it functions solely for resource discovery rather than message routing. At the core of the protocol are resource descriptors, which are structured documents typically formatted as Resource Descriptors (JRDs). These descriptors contain an array of links pointing to related resources, such as profiles, images, or additional , enabling clients to retrieve contextual information about the identified entity. Discovery begins at a standardized endpoint, specifically /.well-known/webfinger on the target , which serves as the for querying resource information via HTTP. Each resource descriptor includes essential properties, with the field mandating the acct: of (e.g., acct:user@host), and an array of link relations defined by the rel to specify the type of connection, such as rel="http://webfinger.net/rel/profile-page" for linking to a 's profile webpage. These relations use either IANA-registered values or full for precision, accompanied by optional attributes like href for the target , type for media types, and properties for embedded .

History

Development origins

WebFinger originated in 2009, when , then at and known for his work on and , proposed the protocol as an extension of XMPP's XEP-0157 to enable web-based discovery of user information. This proposal aimed to adapt the XMPP extension's approach to contact addresses—originally designed for specifying service details like and JabberIDs—into a simpler HTTP-based mechanism for broader use. The development was driven by the growing interest in decentralized social networking during the late 2000s, where users sought ways to link identities and profiles across independent sites without relying on centralized platforms. Fitzpatrick's idea built on existing efforts to make email addresses more expressive as identifiers, influenced by OpenID's decentralized model and the (FOAF) project's emphasis on descriptions of relationships and profiles. Early prototypes focused on practical implementations tied to blogging platforms, including , to support cross-site profile linking and user discovery through straightforward HTTP queries. These initial efforts highlighted WebFinger's potential for enabling services like exploration and identity verification in distributed environments. Key early discussions involved the IETF's XMPP , where contributors like Peter Saint-Andre recognized similarities to XEP-0157 and advocated for broader standardization to refine the protocol for internet-scale adoption.

Standardization process

The standardization of WebFinger began with an individual Internet-Draft submission titled "The WebFinger Protocol" (draft-hammer-webfinger-00), authored by Eran Hammer-Lahav, Brad Fitzpatrick, and Blaine Cook, and posted to the IETF on October 19, 2009. This initial draft outlined the protocol's use of HTTP GET requests to a for discovering about entities identified by s, including the introduction of the 'acct' URI scheme for user accounts. In April 2012, the IETF issued a call for adoption of the evolving draft by the Applications Area (APPSAWG), marking its transition to a working group effort under the name draft-ietf-appsawg-webfinger. The , chaired by Leiba and Kucherawy, refined the specification through 19 iterations of drafts between July 2012 and August 2013, addressing feedback on , extensibility, and integration with HTTP standards. Key contributors during this phase included Paul E. Jones, Gonzalo Salgueiro, Michael B. Jones, and Joseph Smarr. The finalized document was approved by the Internet Engineering Steering Group (IESG) and published as RFC 7033, "WebFinger," on September 27, 2013, achieving Proposed Standard status. This formally defines the protocol's core mechanics, including the use of for all requests to ensure secure discovery, the structure of Resource Descriptors (JRDs) for responses, and extensibility through link relations; it also incorporates security considerations such as protection against information leakage and denial-of-service attacks. Additionally, the 'acct' scheme was further specified in a separate RFC 7565, published in August 2015. Following publication, RFC 7033 has seen no major formal updates or revisions, with no reported errata as of the latest IETF records. Community-driven extensions have emerged in related standards, such as the W3C's (published as a Recommendation in ), which leverages WebFinger for actor discovery in federated social networks while enforcing as mandated; these adaptations focus on integration with modern web architectures without altering the core protocol.

Technical specification

Resource discovery

WebFinger resource discovery involves parsing the input to identify the target host. The acct: , an identifier of the form acct:username@[hostname](/page/Hostname), is parsed according to RFC 3986 to extract the component, which forms the base for the (e.g., https://[hostname](/page/Hostname)). The client then constructs the WebFinger by appending the fixed path /.well-known/webfinger to the and adding the required resource query with the encoded target (e.g., https://[hostname](/page/Hostname)/.well-known/webfinger?resource=acct%3Ausername%40[hostname](/page/Hostname)). Upon querying the WebFinger URL, a 404 status indicates the resource is unknown to the server.

Host metadata retrieval

Once the WebFinger endpoint has been discovered for a given host, clients retrieve metadata about a specific resource by sending an HTTP GET request to the path /.well-known/webfinger on that host, appending the required resource query parameter that specifies the target URI (e.g., acct:[email protected], URL-encoded as acct%3Auser%40example.com). To indicate the desired response format, clients include an Accept header with the value application/jrd+json, ensuring the server returns the resource descriptor in JSON Resource Descriptor (JRD) format if supported. The request supports an optional rel parameter to filter the response by specific link relation types, allowing clients to retrieve only relevant metadata; for instance, specifying rel=http://webfinger.net/rel/avatar limits results to avatar-related links. Multiple rel values can be provided for broader filtering, and the parameter uses URL encoding for any special characters in relation URIs. Servers process these parameters to generate a targeted response, which upon success returns a 200 OK status code with a Content-Type header set to application/jrd+json. In cases of failure, such as an invalid resource or server error, the server issues appropriate 4xx or 5xx HTTP status codes without disclosing sensitive details. All WebFinger queries must use to protect the and integrity of the exchanged , with the request host matching the host portion of the resource URI to prevent cross-host leaks. For performance and scalability, servers include standard HTTP caching headers, such as Cache-Control, in responses to specify expiration times or validators, enabling clients to cache resource descriptors and reduce repeated queries. This caching mechanism aligns with HTTP/1.1 guidelines, allowing conditional requests to refresh stale data efficiently.

JSON resource descriptor format

The JSON Resource Descriptor (JRD) serves as the standardized response format in the WebFinger protocol, consisting of a single object that conveys metadata about the queried resource. As specified in RFC 7033, the root object of a JRD includes a "subject" member, which SHOULD be present and is a string representing the (typically an acct: URI) of the entity being described, and an optional "links" member that is an array of link description objects. Additional optional root-level members include "aliases", an array of alternative s for the subject, and "properties", an object mapping keys to string or null values for arbitrary metadata. Each element in the "links" array is a JSON object describing a hyperlink, with the following properties: "rel", a required string indicating the relation type (a URI or registered link relation name); "href", an optional string providing the target URI; "type", an optional string specifying the media type of the target resource; "titles", an optional object of language-tagged strings for human-readable titles; and "properties", an optional object for extension metadata similar to the root "properties". Servers may include multiple links, and clients must ignore any unrecognized properties or members to ensure extensibility. Common relation types in JRD links include "http://webfinger.net/rel/profile-page", which points to the user's profile page, as illustrated in the protocol's normative example. Another frequently used relation is "me", a registered link relation indicating that the target resource represents the same entity as the subject, often linking to a self-referential profile or identity endpoint. For instance, a typical JRD response for the subject "acct:[email protected]" might appear as follows:
json
{
  "subject": "acct:[email protected]",
  "links": [
    {
      "rel": "http://webfinger.net/rel/profile-page",
      "href": "https://www.example.com/~bob/"
    },
    {
      "rel": "me",
      "href": "https://www.example.com/~bob/",
      "type": "text/html"
    }
  ]
}
This structure adheres to the schema in RFC 7033, where validation ensures the "subject" matches the queried resource and links conform to the defined object format, though servers are not required to perform strict schema validation.

Examples

Basic profile lookup

To perform a basic profile lookup using WebFinger, consider a hypothetical query for the identifier acct:[email protected] on the fictional host example.com. This initiates a discovery process where a client sends an HTTP GET request to the server's /.well-known/webfinger endpoint, specifying the resource parameter to identify the user. The server responds with a JSON Resource Descriptor (JRD) containing links to relevant resources, such as a profile page and contact information. The request is constructed as follows:
GET /.well-known/webfinger?resource=acct%3Aalice%40example.com HTTP/1.1
Host: example.com
Accept: application/jrd+json
This URL-encodes the acct:[email protected] URI in the resource query parameter and requests the JRD . For manual verification, the curl command-line tool can be used:
curl -H "Accept: application/jrd+json" "https://example.com/.well-known/webfinger?resource=acct%3Aalice%40example.com". This fetches the response directly from the , assuming is enforced for security.
A successful response includes an HTTP 200 status, appropriate headers, and the JRD body. The headers typically specify the content type and may include CORS allowances:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/jrd+json; charset=utf-8
The JRD payload is a JSON object with a subject field matching the queried resource and an array of links describing discoverable items. For this example:
json
{
  "subject": "acct:[email protected]",
  "links": [
    {
      "rel": "http://webfinger.net/rel/profile-page",
      "href": "https://example.com/~alice/"
    },
    {
      "rel": "http://webfinger.net/rel/avatar",
      "href": "https://example.com/~alice/photo.jpg",
      "type": "image/jpeg"
    },
    {
      "rel": "http://packetizer.com/rel/businesscard",
      "type": "text/vcard",
      "href": "https://example.com/~alice/alice.vcf"
    }
  ]
}
Parsing this output yields links to Alice's profile page (a personal webpage), avatar photo (an image file), and (a file containing contact details like name, email, and address). These relations follow registered link types for interoperability.

Social networking integration

WebFinger plays a crucial role in enabling discovery across federated networks, particularly in platforms like , where it facilitates interactions between on different instances without relying on centralized directories. In , when a enters a such as @[email protected] to follow someone remotely, the local instance triggers a WebFinger lookup by querying the remote server's /.well-known/webfinger endpoint with the resource parameter set to the account (e.g., acct:[email protected]). This process allows seamless cross-instance following by resolving the remote 's and associated resources. The response from a server in the is a Resource Descriptor (JRD) that includes the subject's and an array of links pointing to key resources, such as the ActivityPub actor document (via a self rel with application/activity+json type), the user's profile page (via profile-page rel with text/html type), and the avatar image (via an http://webfinger.net/rel/avatar rel). These links enable the requesting instance to fetch the remote user's profile details, posts, and media for integration into the local feed, supporting features like displaying avatars and bios during follows. Beyond , WebFinger supports cross-instance discovery in other federated platforms. In , it resolves user handles to hCard documents and seed location endpoints, allowing pods to exchange profile data and initiate connections across the network. Similarly, employs WebFinger to identify users via acct: URIs and discover their feeds and endpoints, promoting interoperability in decentralized social environments. This integration provides significant benefits in social contexts by enabling decentralized user search and , where individuals can locate and interact with others across independent servers using simple identifiers, eliminating the need for central registries and enhancing privacy through distributed control.

Implementations and adoption

Server-side tools

Several open-source libraries and servers facilitate the implementation of WebFinger endpoints on the server side, enabling hosts to provide discoverable resource descriptors for users or entities. One prominent PHP-based option is the WebFinger library, a lightweight implementation that handles HTTP requests to the /.well-known/webfinger path and returns Resource Descriptors (JRDs) compliant with 7033. This library integrates easily into PHP applications, such as systems, by mapping user identifiers to profile data like profile URLs or avatar links. Similarly, the WebFinger plugin for , developed by Norbert Pfefferle, extends the platform to serve WebFinger responses for users, pulling data from user profiles and post feeds. In environments, the node-webfinger-service provides a dedicated server module for exposing WebFinger endpoints, supporting both standalone operation and integration into applications. It processes resource queries (e.g., acct:username@host) and generates JRDs dynamically from a configurable data store, making it suitable for custom social or identity services. For broader ecosystems like the , WebFinger is natively built into platforms such as and to ensure compatibility. Mastodon's implementation resolves acct: URIs to actor profiles via its Rails-based routing, while Pleroma's backend handles WebFinger lookups to federate user discovery across instances. Setting up a WebFinger endpoint typically involves configuring routes for /.well-known/webfinger and implementing logic to generate JRDs from user data, such as linking to profile pages or service endpoints. For instance, in or setups, developers route GET requests with resource and rel parameters to a handler that queries a database for the user's information and formats it as a object with subject, aliases, and links arrays. This process adheres to the protocol's requirements for HTTP 200 responses with application/jrd+json content type, often secured via . As of November 2025, WebFinger's adoption in the exceeds 19,000 active instances, primarily through integrations in and , underscoring its role in decentralized social networking. By March 2025, the had surpassed 15 million users.

Client-side usage

Client-side usage of WebFinger involves applications querying remote servers to descriptors for entities by URIs, typically using HTTP GET requests to well-known endpoints. This enables dynamic retrieval of metadata such as profile links, avatars, or contact information without prior configuration. Several open-source libraries facilitate WebFinger queries in client applications. In , the python-webfinger library provides a straightforward implementation for performing lookups compliant with RFC 7033, supporting resource discovery via LRDD or direct JRD formats. For JavaScript environments, the e14n/webfinger module offers a client that handles and JRD documents over HTTP/, while the silverbucket/webfinger.js library extends support to browsers and with types for modern web applications. Common use cases include auto-discovering contact details in email clients, where a client can provision configuration data like IMAP/SMTP servers by querying a user's . In verification-focused apps, WebFinger allows confirmation of user identities by resolving links to authoritative profiles or endpoints. Integration examples demonstrate WebFinger's role in authentication flows, such as embedding it within 2.0 and to dynamically locate issuers based on user identifiers. It also supports decentralized identity systems, where clients resolve domain-based URIs to fetch credential endpoints, as seen in blockchain name services like Unstoppable Domains. Adoption has grown in projects since 2020, particularly within the IndieWeb and ecosystems; for instance, implementations like rely on WebFinger for actor discovery across federated servers. In contexts, its use in protocols has increased, enabling URI-based resolution in distributed applications.

Security considerations

Privacy risks

WebFinger's public discovery endpoints can lead to unintended information leakage, as they allow any unauthenticated to retrieve about users, such as links, avatars, or associated services, without requiring explicit . This exposure occurs because the relies on standard HTTP GET requests to well-known URIs, making discoverable by anyone with network access. For instance, querying a user's URI can reveal existence confirmation and linked resources, potentially enabling of user accounts or social graphs. Historically, early implementations and drafts of WebFinger prior to RFC 7033 in 2013 were susceptible to risks from unencrypted HTTP transports, which could expose query details, including sensitive resource identifiers, to interception on compromised networks. Although the final specification mandates HTTPS to mitigate such eavesdropping, legacy systems or misconfigurations in pre-RFC deployments allowed plaintext transmission of user metadata, heightening the potential for data interception and abuse. WebFinger utilizes (CORS), inheriting all applicable security considerations from the CORS specification, including potential risks associated with cross-origin requests from web browsers.

Mitigation strategies

To mitigate risks associated with unauthorized access to user , WebFinger implementations must enforce the use of for all queries and responses, as non-secure HTTP connections are explicitly prohibited to prevent man-in-the-middle attacks that could intercept or alter sensitive information. Clients are required to validate server certificates and reject invalid or untrusted ones, ensuring and integrity of the JSON Resource Descriptor (JRD) exchanged during lookups. Server operators should implement robust access controls to curb potential abuse, such as large-scale data harvesting or denial-of-service attempts through excessive queries. based on client addresses or other identifiers is recommended to restrict the frequency of requests, thereby reducing the feasibility of automated scraping while allowing legitimate usage. For queries involving sensitive information, servers may require token-based authentication or other mechanisms to verify client legitimacy before disclosing non-public details, enabling differentiated responses that withhold private or from unauthenticated requesters. Minimizing data disclosure is a core for preserving user privacy in WebFinger deployments, where servers must limit JRD contents to publicly intended properties only, excluding any private identifiers, locations, or relationships unless explicitly authorized by the user. System administrators are advised to provide granular user controls, allowing individuals to configure which elements of their —such as profile URLs or contact details—are exposed via WebFinger, thereby preventing inadvertent leakage of personal information to unauthorized parties. On the , developers should incorporate practices that respect and enhance query , such as performing WebFinger lookups only with explicit to avoid unintended privacy intrusions. Where applicable, clients can include headers in requests to signal a preference against persistent logging of query activity, and anonymize requests by omitting unnecessary identifying headers or using privacy-preserving proxies to further obscure the requester's origin.

References

  1. [1]
    RFC 7033: WebFinger
    This specification defines the WebFinger protocol, which can be used to discover information about people or other entities on the Internet using standard HTTP ...
  2. [2]
    Information on RFC 7033 - » RFC Editor
    This specification defines the WebFinger protocol, which can be used to discover information about people or other entities on the Internet using standard HTTP ...
  3. [3]
    draft-ietf-appsawg-webfinger-08
    This is an older version of an Internet-Draft that was ultimately published as RFC 7033.
  4. [4]
    draft-ietf-appsawg-webfinger-00
    Jul 2, 2012 · Simplifying the Login Process OpenID (http://www.openid ... WebFinger Protocol WebFinger does not actually introduce a new protocol, per se.
  5. [5]
    WebFinger - Google Groups
    Brad Fitzpatrick's profile photo. Brad Fitzpatrick, … Bob Wyman5. 11/1/13. Re: [webfinger] Vision for Webfinger - what are we doing? On Fri, Nov 1, 2013 at 11 ...Missing: XEP- 0157
  6. [6]
    XEP-0157: Contact Addresses for XMPP Services
    Mar 4, 2021 · XEP-0157 defines a method for specifying contact addresses for XMPP services, including email, URLs, and JabberIDs for roles like admin, abuse, ...Missing: WebFinger | Show results with:WebFinger
  7. [7]
    draft-hammer-webfinger-00 - IETF Datatracker
    Oct 19, 2009 · This document is an Internet-Draft (I-D). Anyone may submit an I-D to the IETF. This I-D is not endorsed by the IETF and has no formal ...
  8. [8]
  9. [9]
    History for draft-jones-appsawg-webfinger -06 - IETF Datatracker
    Document history ; 2012-05-03. 03, Murray Kucherawy, Annotation tag Awaiting Merge with Other Document set. ; 2012-04-09. 03, Murray Kucherawy. Expecting new ...
  10. [10]
    History for rfc7033 - IETF Datatracker
    IANA registries were updated to include RFC7033. 2013-09-27. (System), RFC published. IETF IESG IAB IRTF IETF LLC IETF Trust RFC Editor IANA Privacy Statement.
  11. [11]
    RFC 7033 - WebFinger - IETF Datatracker
    Oct 14, 2015 · WebFinger (RFC 7033, September 2013)
  12. [12]
    RFC 6415: Web Host Metadata
    This specification describes a method for locating host metadata as well as information about individual resources controlled by the host.
  13. [13]
    RFC 7033 - WebFinger - IETF Datatracker
    This specification defines the WebFinger protocol, which can be used to discover information about people or other entities on the Internet using standard HTTP ...
  14. [14]
  15. [15]
  16. [16]
    RFC 7033: WebFinger
    ### Extracted Example JSON from Section 4.3
  17. [17]
    WebFinger Link Relations - Packetizer
    This page enumerates commonly used link relation values used with the WebFinger protocol. ... This refers to a person's OpenID identity URI, not the OpenID ...Missing: inspirations | Show results with:inspirations
  18. [18]
    WebFinger | Fedify
    WebFinger is a protocol that allows for the discovery of information about people and other entities on the Internet using just their identifier.
  19. [19]
    WebFinger - Mastodon documentation
    Feb 6, 2023 · WebFinger as described in RFC 7033 is a spec that defines a method for resolving links to a resource, given only a URI on a particular server.
  20. [20]
    WebFinger - diaspora* federation protocol
    Response. The WebFinger document must be in the JSON Resource Descriptor (JRD) format and should be served with the application/jrd+json media type.Missing: social | Show results with:social
  21. [21]
    Socialwg/Social API/pump.io API - W3C Wiki
    Dec 16, 2014 · Discovery. Users are identified by Webfinger acct: URIs. Locations of their feeds and social graph endpoints can be discovered using Webfinger.
  22. [22]
    sabre-io/webfinger: WebFinger server implementation - GitHub
    Dec 10, 2020 · This project is a very simple implementation of WebFinger. WebFinger is defined by RFC7033 and describes a simple protocol to find out ...Missing: side | Show results with:side
  23. [23]
  24. [24]
  25. [25]
    Setting Up a WebFinger Server - Packetizer
    Below, we will provide a sample configuration so you can run WebFinger on Apache without the need for any additional software.
  26. [26]
    About Fediverse - Fediverse.Party - explore federated networks
    Sep 1, 2025 · About Fediverse · population ~ 13 661 071 accounts · active users ~ 2 218 554people · servers > 17 002 instances.
  27. [27]
    jcarbaugh/python-webfinger - GitHub
    A simple Python client implementation of WebFinger RFC 7033. WebFinger is a discovery protocol that allows you to find information about people or things in ...Missing: libraries | Show results with:libraries
  28. [28]
    Webfinger client library for Node.js - GitHub
    It supports: XRD documents; JRD documents; host-meta; host-meta.json; http and https; RFC 6415 and the upcoming Webfinger RFC ( ...Missing: web- | Show results with:web-
  29. [29]
  30. [30]
    draft-ietf-appsawg-webfinger-14
    WebFinger Protocol The WebFinger protocol is used to request information ... URI suffix: webfinger Change controller: IETF Specification document(s): RFC ...
  31. [31]
    Login Authorization Server | Unstoppable Domains Developer Portal
    Jan 23, 2024 · With Unstoppable Login, clients will resolve WebFinger information using records stored on a domain name instead of resolving WebFinger ...
  32. [32]
  33. [33]
  34. [34]
  35. [35]
    Web-scraping AI bots cause disruption for scientific databases and ...
    Jun 2, 2025 · Web-scraping AI bots cause disruption for scientific databases and journals. Automated programs gathering training data for artificial- ...