Identity in the FediVerse
I rant about Identity in the FediVerse. It’s mostly written, so I have a text to test various things. Also I’m building a blog, where texts like this belong. The blog is going to be an ActivityPub Client. While building this, I realized that I need to implement 2 to 1 below, and it annoys me.
The identity objects
There at least 4 identifiers used for various things in the Fediverse
- The fediverse handle, e.g.
- The actor id e.g.
- The public key id e.g.
- The actual public key e.g.
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy62VqgKQvKJx8hW6Y8Qi B/2/MIwmj4CiRCqDEC4tz0vkEkexF93edQdiB/wEDuHnJ+LPe1Pau7/dDM3495dd f5pWIglKnhcp/cvd1O+QBAtlSw5zsIFtW5SDYsbj+dMD0s8F8XEJPp/KdRAg1pGi FZ5D79efQjBv5sVAe/fwOCQGT2OBoaxD8odhlBNhXNSkTdfN2NrowsEDTygqfyPt jzZhoTm/Z7Jgqh5Ps4jveZ2U6171P5o8hf+T0+I4by2mfstTNPm0fGfu14vfqRuc eGM2jbGUzOJX7PBKCuev54wz7otCLKDP5SaSrrl8T0Yr5Jodklmm3uC851xOu0L2 HwIDAQAB -----END PUBLIC KEY-----
One can translate from various things to various others. In most cases, 2 and 3 are basically the same. 2 and 3 imply knowledge of 4. Nobody with 4 can look up anything, without effort.
If you have 1, you can use webfinger gymnastics, essentially
to get 2. If you have 2, you can fetch the actor and obtain the
preferredUsername. Then you can compute the domain from the actor url, e.g.
urlparse(actor["id"]).netloc in python, and combined these two with an
@ to get 1.