Adding DID to RSS and Atom Feeds


Decentralized Identifiers (DID) is a World Wide Web Consortium (W3C) specification for, well, distributed identities. The idea is to have an identity that belongs to you and does not belong to any particular service or website.

“In contrast to typical, federated identifiers, DIDs have been designed so that they may be decoupled from centralized registries, identity providers, and certificate authorities. 

“Specifically, while other parties might be used to help enable the discovery of information related to a DID, the design enables the controller of a DID to prove control over it without requiring permission from any other party.”

In my work developing CList I want to enable content and messaging federation – so that people can follow and talk to each other – without being dependent on a specific platform. So I want people to be able to create and use DIDs to help them find and follow each other.

But how? None of the usual services really support DIDs. User identities in pretty much every platform you can think of are platform specific. It’s so pervasive that even the W3C has to define a type of DID, did:web, to correspond to a specific web server location. But even with this, most popular services won’t generate a DID for you (with the notable exception of Bluesky, which creates – but limits – user DIDs).

I approached this work in three major steps:

– first, I created a simple mechanism allowing people to create their own DIDs.

– next, I developed a way for people to add DIDs to their RSS feeds

– and finally, I wrote an RSS reader that detects these DIDs

Let’s look at each of them.

Creating the DID

A DID can be complex, but for our purposes we really don’t need a lot of complexity.  Let’s have a look at my DID:

https://kvstore.mooc.ca/users/downes/did.json

Yes, I’m sharing it with you. It’s a public document. But that’s OK – I can change it, remove it, whatever. And I control what does into it. Here are some relevant sections:

Context 

  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
  ],

Nothing fancy here. I’m declaring that I’m using the W3C definition of DIDs and I’m describing the security suite I’m using.

Also Known As

This is a way to link multiple DIDs together to form a single identity. I found it necessary to do this to allow for the use of the Bluesky DID as well as to support a did:key which allows me to sign comments, annotations or posts. I also use it to help me transfer my identioty from one website to another.

  "id": "did:web:kvstore.mooc.ca:users:downes",
  "alsoKnownAs": [
    "did:key:z6MktjWjn5QHWHN7chfryeYQ6CK5Efb9RWQMaz2Ed1jf92LE",
    "did:web:kvstore.mooc.ca:users:downes",
    "did:web:kvstore.downes.ca:users:downes",
"at://downes.bsky.social"
 ],

Verification Method

This allows me to use my DID to do two things:

  • “authentication” – proves I am who I say I am (login challenges)
  • “assertion” – proves I authored something (content signing)

Services

Here I list the services I use, and who I am on those services. It’s not all the services I use – just the ones I want to admit to publicly.

"service": [
    {
      "id": "did:web:kvstore.mooc.ca:users:downes#kvstore",
      "type": "KVStore",
      "serviceEndpoint": "https://kvstore.mooc.ca"
    },
    {
      "id": "did:web:kvstore.mooc.ca:users:downes#downes-mastodon-social",
      "type": "SocialWebAccount",
      "serviceEndpoint": "downes@mastodon.social"
    },
    {
      "id": "did:web:kvstore.mooc.ca:users:downes#oldaily-mastodon-social",
      "type": "SocialWebAccount",
      "serviceEndpoint": "oldaily@mastodon.social"
    },
    {
      "id": "did:web:kvstore.mooc.ca:users:downes#downes-cosocial-ca",
      "type": "SocialWebAccount",
      "serviceEndpoint": "downes@cosocial.ca"
    },
{ "id": "did:web:kvstore.mooc.ca:users:downes#11679714", "type": "Blog", "serviceEndpoint": "11679714" }, { "id": "did:web:kvstore.mooc.ca:users:downes#Downes-leftish-media", "type": "Blog", "serviceEndpoint": "Downes@leftish.media" } ]

The first service I use is the DID hosting service. I’m using the one attached to CList, which is kvstore.mooc.ca. I have also listed my three Mastodon accounts – two on mastodon.social and one on cosocial.ca. I also list my Blogger and WordPress accounts. I do not list my Bluesky account here; it goes up in the AlsoKnownAs section.

And that’s it! Now, if these services wanted, they could complete the circle by allowing me to record my DID on their services – they could then verify it against this file, see that I’ve declared the service, and we would have a nice distributed sort of identity federation.

But they don’t do that.

Adding DID to RSS Feeds

You can’t just toss a DID into an RSS feed and expect it to work. An RSS feed is a structured document intended to be machine-readible, so that your DID can be automatically extracted by a feed reader. 

After some consideration of alternatives, I decided to use the Atom author tag to do it, first, because the syntax is the same for both RSS and Atom, and second, because it allows me to place both the author’s name and the DID into the same context.

So here’s what they look like:

RSS:

Atom:

As you can see, I use the link tag, specifying both the author name and DID as the URL. Look up that URL, you see the DID I described in the previous section.

The WordPress Plugin

It’s easy for me to put my DID in my own RSS feeds, because I’m the person who creates them, using software that I wrote myself. But what about the rest of the world?

There’s a lot of RSS feeds I can’t fix, but as they say, 80% of the web runs on WordPress, and I can fix that. So (with the help of ChatGPT) I wrote a plugin that allows you to put your DID into your user profile, and which inserts it into your RSS and Atom feeds.

It doesn’t generate the DID – you need a DID generator for that (use CList, or Bluesky, or whatever). You will find a DID element when you edit the profile; put it in and everything is automatic after that.

Here’s more information about the plugin and a link where you can download it: https://clist.mooc.ca/wordpress/README.html You can find the source on GitHub: https://github.com/Downes/CList/tree/main/wordpress/author-did-feeds-v0.1.2/author-did-feeds

Adding DID to Mastodon

Mastodon doesn’t formally support DID, but it does allow you to put data into custom fields. Edit your profile, add a new custom field, and enter the data:

The DID URL does exceed the recommended 40 character limit, but there’s not much to be done about that. With luck, it will mostly be visible in any case. 

An RSS reader that Reads DIDs

In addition to connecting to various social network and content sharing services, CList contains an RSS reader. That means that if people have put their DID into their RSS feed, it’s possible to find them. 

I haven’t written this part yet, so I don’t know exactly how it’s going to work. But here are some potential uses I can put it to:

  • persistent author identity across multiple websites and services;
  • verification of authorship independently of a publishing platform;
  • linking posts to a broader decentralized identity infrastructure;
  • future support for signed posts or signed feeds;
  • decentralized federated annotation network; 
  • distinguishing between display names and machine-readable author identifiers.

There’s a lot we can do with this, but I wanted to get this part out there so people can think of the possibilities.



Source link

  • Related Posts

    Denise Powell wins Democratic primary in Nebraska’s ‘blue dot’ 2nd District

    OMAHA, Neb. (AP) — Denise Powell won the Democratic primary in Nebraska’s 2nd Congressional District on Wednesday in a contest focused on the state’s “blue dot” status in presidential elections.…

    Canada Gazette – Part I, March 19, 2022, Vol. 156, No. 12

    The Canada Gazette, Part I, consists of a weekly issue, published every Saturday; a quarterly index, published every three months; and extra editions, published only when required under special circumstances…

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    You Missed

    Survivors of plane crash off Florida coast were on raft for hours, didn’t know help was coming, military says

    Survivors of plane crash off Florida coast were on raft for hours, didn’t know help was coming, military says

    PGA Championship 2026: TV Schedule, How to Watch, Stream All the Golf From Anywhere

    PGA Championship 2026: TV Schedule, How to Watch, Stream All the Golf From Anywhere

    I Can Save $397 on the Best Summer Basics at Gap’s Sale

    I Can Save $397 on the Best Summer Basics at Gap’s Sale

    Manitoba’s nursing regulator apologizes for discrimination against Indigenous Peoples

    Manitoba’s nursing regulator apologizes for discrimination against Indigenous Peoples

    How Bev Priestman is quietly rebuilding her career…

    Young Chinese struggling with ‘life pressure’ resist government push to boost marriage rate

    Young Chinese struggling with ‘life pressure’ resist government push to boost marriage rate