From 3f21dc78c7e1da78ec3e9d31655acf038e555cfa Mon Sep 17 00:00:00 2001 From: Helge Date: Sun, 15 Oct 2023 16:58:00 +0000 Subject: [PATCH] Fep-2677 identifying the application actor (#188) Reviewed-on: https://codeberg.org/fediverse/fep/pulls/188 Co-authored-by: Helge Co-committed-by: Helge --- fep/2677/fep-2677.md | 88 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 fep/2677/fep-2677.md diff --git a/fep/2677/fep-2677.md b/fep/2677/fep-2677.md new file mode 100644 index 0000000..57c4d1d --- /dev/null +++ b/fep/2677/fep-2677.md @@ -0,0 +1,88 @@ +--- +slug: "2677" +authors: Helge +status: DRAFT +dateReceived: 2023-10-14 +--- +# FEP-2677: Identifying the Application Actor + +## Summary + +It is a common pattern in Fediverse applications to have a special +actor of type Application. This is for example the actor at `https://mastodon.example/actor` +for Mastodon or at `https://pleroma.example/internal/fetch` for Pleroma. +This application actor can be fetched with an unsigned request, so it +is possible to use it to fetch public keys. + +The goal of this FEP is to provide an explicit mechanism of identifying +the application actor, with the goal of making it usable for further tasks, +e.g. + +- Allowing for application to application communication by having +application actor send activities to another application actor's inbox. +- Having an object one can attach further information to. This means, one +could attach a list of implemented FEPs to the application actor. + +## Requirements + +The key word "MUST" in this specification are to be interpreted as described in [RFC 2119]. + +Following [NodeInfo], see also [FEP-f1d5], a Fediverse application implementing this +FEP, i.e. FEP-2677, MUST provide the well-known path `/.well-known/nodeinfo` and serve a document in JRD format [RFC 7033]. +This document MUST then contain a link with relation `https://purl.archive.org/funfedi/applicationActor`, +whose link resolves to an actor of type `Application` (see [ActivityPub]). This actor MUST be retrievable with an unsigned HTTP request. + +## Example + +We will consider the server with domain `node.example`. This means that a request +to `https://node.example/.well-known/nodeinfo` will resolve to + +```json + { + "links": [ + { + "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0", + "href": "https://node.example/nodeinfo/2.0" + }, + { + "rel": "https://purl.archive.org/funfedi/applicationActor", + "href": "https://node.example/actor" + } + ] + } +``` + +Next, a request to `https://node.example/actor` with accept header `application/activity+json` +could return + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + ], + "id": "https://node.example/actor", + "type": "Application", + "inbox": "https://node.example/actor/inbox", + "outbox": "https://node.example/actor/outbox", + "publicKey": { + "id": "https://node.example/actor#main-key", + "owner": "https://node.example/actor", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\n....\n-----END PUBLIC KEY-----\n" + } +} +``` + +## References + +- [ActivityPub] Christine Lemmer Webber, Jessica Tallon, [ActivityPub](https://www.w3.org/TR/activitypub/), 2018 +- [FEP-f1d5] CJ, silverpill, [NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md), 2023 +- [NodeInfo] [NodeInfo protocol 2.1](http://nodeinfo.diaspora.software/protocol.html) +- [RFC 2119] S. Bradner, [Key words for use in RFCs to Indicate Requirement Levels](https://tools.ietf.org/html/rfc2119.html), 1997 +- [RFC 7033] P. Jones, G. Salgueiro, M. Jones, J. Smarr, [Webfinger](https://www.rfc-editor.org/rfc/rfc7033.html), 2013 + +## Copyright + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +To the extent possible under law, the authors of this Fediverse Enhancement Proposal have waived all copyright and related or neighboring rights to this work.