FEP-c7d3: Ownership

I have a few notes.

First, I don’t think it makes sense to say that the object is authentic. Rather, it’s safer to say that the ownership relationship is authentic.

Second, consider an ActivityPub API client that implements a drawing tool. You can create, update, and delete pictures. For an actor https://social.example/user/evan, The client might push Create activities into the actor’s outbox like this:

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Create",
    "to": "as:Public",
    "object": {
           "type": "Image",
           "id": "https://drawing.example/FJIhGP8Jp7CMWTO5hrjIW",
           "url": {
                 "type": "Link",
                 "mediaType": "image/svg+xml",
                 "href": "https://drawing.example/files/5CvE73Yib6pDJXuZPaGaI.svg"
           }
    }
}

Fetching that drawing might return something like this:

{
       "@context": "https://www.w3.org/ns/activitystreams",
      "attributedTo": "https://social.example/user/evan",
      "to": "as:Public",
     "type": "Image",
      "id": "https://drawing.example/FJIhGP8Jp7CMWTO5hrjIW",
      "url": {
             "type": "Link",
             "mediaType": "image/svg+xml",
             "href": "https://drawing.example/files/5CvE73Yib6pDJXuZPaGaI.svg"
      }
}

This is an authentic ownership relationship, but the domains don’t match.

One way to confirm this ownership is by finding the Create activity in the actor’s outbox. That’s a linear search through a collection of O(10^5) or more, with pages of 20 or 100 items at a time. There’s an issue in AP for making this kind of search faster. membership endpoint · Issue #462 · w3c/activitypub · GitHub

Finally, I think you should change “MUST discard” to “MAY discard”. There may be other ways to determine the owner of an object, besides the one above or the ones listed – for example, a trust metric on the sending server. Leave it open to other uses.

2 Likes