Skip to content

Piero Bosio Social Web Site Personale Logo Fediverso

Social Forum federato con il resto del mondo. Non contano le istanze, contano le persone

`keyId` is a problem.

General Discussion
5 3 0
  • keyId is a problem.

    Generally speaking, most Actors have a `keyId' that looks something like:

    https://enigmatick.social/user/jdt#main-key
    

    When an inbox POST arrives from an unknown user, we can chop off the bit including #main-key and we can pull the remaining URL as the Actor's ID.

    But some implementations decided they should use /main-key instead. That indicates that the keyId format is unreliable and not well-specified. So I switched to deferring this header check for unknown Actors deeper into my ingestion pipeline so that I could retrieve the actor string from the object being sent. That works pretty well.

    But GET requests. Like followers_synchronization. Dammit. There's no object to refer to. So we're back to parsing the keyId and hoping for meaning.

    Out of 124,007 Actors in my database, 587 do not comply with the #main-key convention.

    enigmatick=> select count(*) from actors where as_public_key->>'id' NOT LIKE '%#main-key';
    count
    -------
    587
    (1 row)
    

    For full coverage, I need to accommodate /main-key and #key as well

    #ActivityPub

  • keyId is a problem.

    Generally speaking, most Actors have a `keyId' that looks something like:

    https://enigmatick.social/user/jdt#main-key
    

    When an inbox POST arrives from an unknown user, we can chop off the bit including #main-key and we can pull the remaining URL as the Actor's ID.

    But some implementations decided they should use /main-key instead. That indicates that the keyId format is unreliable and not well-specified. So I switched to deferring this header check for unknown Actors deeper into my ingestion pipeline so that I could retrieve the actor string from the object being sent. That works pretty well.

    But GET requests. Like followers_synchronization. Dammit. There's no object to refer to. So we're back to parsing the keyId and hoping for meaning.

    Out of 124,007 Actors in my database, 587 do not comply with the #main-key convention.

    enigmatick=> select count(*) from actors where as_public_key->>'id' NOT LIKE '%#main-key';
    count
    -------
    587
    (1 row)
    

    For full coverage, I need to accommodate /main-key and #key as well

    #ActivityPub

    @jdt You're supposed to fetch the keyId first, then fetch its owner (or controller).
    But in practice its either /main-key (GoToSocial) or fragment ID, so it is indeed possible to save a HTTP request.

  • keyId is a problem.

    Generally speaking, most Actors have a `keyId' that looks something like:

    https://enigmatick.social/user/jdt#main-key
    

    When an inbox POST arrives from an unknown user, we can chop off the bit including #main-key and we can pull the remaining URL as the Actor's ID.

    But some implementations decided they should use /main-key instead. That indicates that the keyId format is unreliable and not well-specified. So I switched to deferring this header check for unknown Actors deeper into my ingestion pipeline so that I could retrieve the actor string from the object being sent. That works pretty well.

    But GET requests. Like followers_synchronization. Dammit. There's no object to refer to. So we're back to parsing the keyId and hoping for meaning.

    Out of 124,007 Actors in my database, 587 do not comply with the #main-key convention.

    enigmatick=> select count(*) from actors where as_public_key->>'id' NOT LIKE '%#main-key';
    count
    -------
    587
    (1 row)
    

    For full coverage, I need to accommodate /main-key and #key as well

    #ActivityPub

    @jdt the fragment in a JSON-LD document IRI has a semantic meaning that goes back to RDF: https://www.w3.org/TR/rdf11-concepts/#section-fragID

    > a secondary resource that is usually a part of, view of, defined in, or described in the primary resource, and the precise semantics depend on the set of representations that might result from a retrieval action on the primary resource.

  • @jdt You're supposed to fetch the keyId first, then fetch its owner (or controller).
    But in practice its either /main-key (GoToSocial) or fragment ID, so it is indeed possible to save a HTTP request.

    @silverpill@mitra.social That makes sense. I guess I was getting a little bit spun around by the idea that the keyId is not the Actor id and thinking too hard about it.

  • @jdt the fragment in a JSON-LD document IRI has a semantic meaning that goes back to RDF: https://www.w3.org/TR/rdf11-concepts/#section-fragID

    > a secondary resource that is usually a part of, view of, defined in, or described in the primary resource, and the precise semantics depend on the set of representations that might result from a retrieval action on the primary resource.

    @mariusor@metalhead.club That's great context; thanks!


Gli ultimi otto messaggi ricevuti dalla Federazione
  • @mariusor@metalhead.club That's great context; thanks!

    read more

  • @silverpill@mitra.social That makes sense. I guess I was getting a little bit spun around by the idea that the keyId is not the Actor id and thinking too hard about it.

    read more

  • @jdt the fragment in a JSON-LD document IRI has a semantic meaning that goes back to RDF: https://www.w3.org/TR/rdf11-concepts/#section-fragID

    > a secondary resource that is usually a part of, view of, defined in, or described in the primary resource, and the precise semantics depend on the set of representations that might result from a retrieval action on the primary resource.

    read more

  • @jdt You're supposed to fetch the keyId first, then fetch its owner (or controller).
    But in practice its either /main-key (GoToSocial) or fragment ID, so it is indeed possible to save a HTTP request.

    read more

  • keyId is a problem.

    Generally speaking, most Actors have a `keyId' that looks something like:

    https://enigmatick.social/user/jdt#main-key

    When an inbox POST arrives from an unknown user, we can chop off the bit including #main-key and we can pull the remaining URL as the Actor's ID.

    But some implementations decided they should use /main-key instead. That indicates that the keyId format is unreliable and not well-specified. So I switched to deferring this header check for unknown Actors deeper into my ingestion pipeline so that I could retrieve the actor string from the object being sent. That works pretty well.

    But GET requests. Like followers_synchronization. Dammit. There's no object to refer to. So we're back to parsing the keyId and hoping for meaning.

    Out of 124,007 Actors in my database, 587 do not comply with the #main-key convention.

    enigmatick=> select count(*) from actors where as_public_key->>'id' NOT LIKE '%#main-key'; count ------- 587 (1 row)

    For full coverage, I need to accommodate /main-key and #key as well

    #ActivityPub

    read more

  • @reiver I'd consider interoperating social networks to be "federated", but I know it's not a precise term. There are similar ambiguities with other commonly used terms: decentralization, server, node, instance, and so on. We have our personal definitions but find that others have a different mental model than ours. It might be interesting to have a collaborative social web glossary that captures the variations of how these terms are used.

    read more

  • @rimu@mastodon.nzoss.nz Definitely. Offloading the static assets to nginx is a big win. Varnish adds a layer of serving from memory that takes it up a notch. Like having your own Fastly pop.

    It does require some configuration nuance to be sure you aren't serving cached assets to the wrong connections (e.g., authenticated GET requests that shouldn't be shared beyond a specific session).

    read more

  • @eyeinthesky

    Only as a metaphor.

    Federation happens between servers / nodes, not between networks.

    read more
Post suggeriti
  • 0 Votes
    6 Posts
    0 Views
    @klu9 @eyeinthesky Having multiple servers connect to each other is Federation.Having multiple independent servers (regardless of whether they connect to each other or not) is Decentralization....TS is an independent server — thus, it with others form Decentralized social-media.TS does not connect to other servers — thus, not Federated.
  • 0 Votes
    1 Posts
    10 Views
    Week in Fediverse 2025-11-28Servers- tootik v0.20.0- Ktistec v3.2.1- NodeBB v4.7.0- Wafrn v2025.11.01- Loops v1.0.0-beta.5- Mitra v4.14.0- Misskey v2025.11.1- Omnom v0.8.0- PieFed v1.3.5- stegodon: An SSH-first federated blogging platform- linkblocks: A federated network to bookmark, share and discuss good web pages with your friendsClients- Chihu v1.14.0- Phanpy changelogTools and Plugins- feed2fedi v3.4.0- FIRES Server v0.7.0- OwncastLive Panel: A GNOME Shell extension that monitors your favorite Owncast instances and notifies you when they go liveArticles- Git as Federation Transport — Rethinking How Small Social Networks Talk to Each Other- Now witness the power of this fully operational Fediverse!- Fediverse onboarding resources- Owncast Newsletter November 2025- Fediverse Report – #144-----#WeekInFediverse #Fediverse #ActivityPubPrevious edition: https://mitra.social/objects/019aa829-83b6-d369-eedb-8725125ced7b
  • @robertwrighter

    General Discussion activitypub algomedia
    1
    0 Votes
    1 Posts
    10 Views
    @robertwrighter we do need to enable boosting of a podcast.stuff can go viral for two different reasons. actual humans sharing it or an algorithm deciding to put it in front of people. the second is what we mostly have to rely on for anything except a social media post (imo we can eventually fix that with #ActivityPub). it's why making your podcast into a YouTube video makes sense. but #AlgoMedia generally selects stuff that's exactly the opposite of what makes non zero great :(
  • 0 Votes
    3 Posts
    6 Views
    @blog Thanks! Much respect for just getting this out there. Love the comments! 😂