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.
@helge@mymath.rocks
- The actor id e.g.
https://mymath.rocks/endpoints/SYn3cl_N4HAPfPHgo2x37XunLEmhV9LnxCggcYwyec0
- The public key id e.g.
https://mymath.rocks/endpoints/SYn3cl_N4HAPfPHgo2x37XunLEmhV9LnxCggcYwyec0#serverKey
- 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
GET https://mymath.rocks/.well-known/webfinger?resource=acct:helge@mymath.rocks
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.