Mastodon is a free, open-source social networking service that’s decentralized and distributed. It was created in 2016 as a substitute for centralized social media platforms similar to Twitter and Fb.
One of many key options of Mastodon is the usage of the WebFinger protocol, which permits customers to find and entry details about different customers on the Mastodon community. WebFinger is an easy HTTP-based protocol that permits a consumer to find details about different customers or assets on the web by utilizing their electronic mail deal with or different figuring out data. The WebFinger protocol is necessary for Mastodon as a result of it permits customers to search out and comply with one another on the community, no matter the place they’re hosted.
WebFinger makes use of a “well-known” path construction when calling an area. You might be acquainted with the robots.txt conference. All of us simply agree that robots.txt will sit on the prime path of everybody’s area.
The WebFinger protocol is an easy HTTP-based protocol that permits a consumer or search to find details about different customers or assets on the web by utilizing their electronic mail deal with or different figuring out data. My is first title eventually title .com, so…my private WebFinger API endpoint is right here https://www.hanselman.com/.well-known/webfinger
The concept is that…
-
A consumer sends a WebFinger request to a server, utilizing the e-mail deal with or different figuring out data of the consumer or useful resource they’re making an attempt to find.
-
The server appears up the requested data in its database and returns a JSON object containing the details about the consumer or useful resource. This JSON object is known as a “useful resource descriptor.”
-
The consumer’s shopper receives the useful resource descriptor and shows the data to the consumer.
The useful resource descriptor incorporates numerous sorts of details about the consumer or useful resource, similar to their title, profile image, and hyperlinks to their social media accounts or different on-line assets. It might probably additionally embrace different sorts of data, such because the consumer’s public key, which can be utilized to ascertain a safe reference to the consumer.
There’s an awesome explainer right here as properly. From that web page:
When somebody searches for you on Mastodon, your server will probably be queried for accounts utilizing an endpoint that appears like this:
Notice that Mastodon consumer names begin with @ so they’re @username@someserver.com. Identical to twiter can be @shanselman@twitter.com I might be @shanselman@hanselman.com now!
So maybe https://www.hanselman.com/.well-known/webfinger?useful resource=acct:FRED@HANSELMAN.COM
Mine returns
{
"topic":"acct:shanselman@hachyderm.io",
"aliases":
[
"https://hachyderm.io/@shanselman",
"https://hachyderm.io/users/shanselman"
],
"hyperlinks":
[
{
"rel":"http://webfinger.net/rel/profile-page",
"type":"text/html",
"href":"https://hachyderm.io/@shanselman"
},
{
"rel":"self",
"type":"application/activity+json",
"href":"https://hachyderm.io/users/shanselman"
},
{
"rel":"http://ostatus.org/schema/1.0/subscribe",
"template":"https://hachyderm.io/authorize_interaction?uri={uri}"
}
]
}
This file must be returned as a mime kind of software/jrd+json
My web site is an ASP.NET Razor Pages web site, so I simply did this in Startup.cs to map that well-known URL to a web page/route that returns the JSON wanted.
providers.AddRazorPages().AddRazorPagesOptions(choices =>
{
choices.Conventions.AddPageRoute("/robotstxt", "/Robots.Txt"); //i did this earlier than, not wanted
choices.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger");
choices.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger/{val?}");
});
then I made a webfinger.cshtml like this. Notice I’ve to double escape the @@ websites as a result of it is Razor.
@web page
@{
Format = null;
this.Response.ContentType = "software/jrd+json";
}
{
"topic":"acct:shanselman@hachyderm.io",
"aliases":
[
"https://hachyderm.io/@@shanselman",
"https://hachyderm.io/users/shanselman"
],
"hyperlinks":
[
{
"rel":"http://webfinger.net/rel/profile-page",
"type":"text/html",
"href":"https://hachyderm.io/@@shanselman"
},
{
"rel":"self",
"type":"application/activity+json",
"href":"https://hachyderm.io/users/shanselman"
},
{
"rel":"http://ostatus.org/schema/1.0/subscribe",
"template":"https://hachyderm.io/authorize_interaction?uri={uri}"
}
]
}
This can be a static response, but when I used to be internet hosting pages for multiple individual I would need to take within the url with the consumer’s title, after which map it to their aliases and return these appropriately.
Even simpler, you possibly can simply use the JSON file of your personal Mastodon server’s webfinger response and SAVE IT as a static json file and duplicate it to your personal server!
So long as your server returns the best JSON from that well-known URL then it’s going to work.
So that is my template https://hachyderm.io/.well-known/webfinger?useful resource=acct:shanselman@hachyderm.io from the place I am hosted now.
If you wish to get began with Mastodon, begin right here. https://github.com/joyeusenoelle/GuideToMastodon/ it looks like Twitter circa 2007 besides it isn’t owned by anybody and relies on internet requirements like ActivityPub.
Hope this helps!
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, marketing consultant, father, diabetic, and Microsoft worker. He’s a failed stand-up comedian, a cornrower, and a ebook writer.