1
0
mirror of https://codeberg.org/fediverse/fep.git synced 2026-08-05 19:55:46 +00:00

Fep-2677 identifying the application actor (#188)

Reviewed-on: https://codeberg.org/fediverse/fep/pulls/188
Co-authored-by: Helge <helge.krueger@gmail.com>
Co-committed-by: Helge <helge.krueger@gmail.com>
This commit is contained in:
Helge
2023-10-15 16:58:00 +00:00
committed by silverpill
parent 0c56f1dbab
commit 3f21dc78c7
+88
View File
@@ -0,0 +1,88 @@
---
slug: "2677"
authors: Helge <helge.krueger@gmail.com>
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.