Mastodonは分散・分散型の無料オープンソースソーシャルネットワーキングサービスです。2016年にTwitterやFacebookなどの中央集権型ソーシャルメディアプラットフォームの代替として作成されました。

Mastodonの主な機能の1つはWebFingerプロトコルの使用であり、これによりユーザーはMastodonネットワーク上の他のユーザーに関する情報を発見してアクセスできます。WebFingerはシンプルなHTTPベースのプロトコルで、ユーザーがメールアドレスやその他の識別情報を使用して、インターネット上の他のユーザーやリソースに関する情報を発見できるようにします。WebFingerプロトコルがMastodonにとって重要なのは、ユーザーがホストされている場所に関係なく、ネットワーク上で相互に検索してフォローできるようにするためです。

WebFingerはドメインを呼び出す際に「well known」パス構造を使用します。robots.txtの慣例に馴染みがあるかもしれません。私たちはrobots.txtがすべてのドメインの最上位パスに置かれることに同意しています。

WebFingerプロトコルはシンプルなHTTPベースのプロトコルで、ユーザーがメールアドレスやその他の識別情報を使用して、インターネット上の他のユーザーやリソースに関する情報を発見できるようにします。私はfirst name at last name .comなので…私の個人的なWebFinger APIエンドポイントはここにあります https://www.hanselman.com/.well-known/webfinger

考え方は…

  1. ユーザーが発見しようとしているユーザーまたはリソースのメールアドレスやその他の識別情報を使用して、サーバーにWebFingerリクエストを送信します。

  2. サーバーはデータベースで要求された情報を検索し、ユーザーまたはリソースに関する情報を含むJSONオブジェクトを返します。このJSONオブジェクトは「リソース記述子」と呼ばれます。

  3. ユーザーのクライアントがリソース記述子を受け取り、ユーザーに情報を表示します。

リソース記述子には、名前、プロフィール画像、ソーシャルメディアアカウントやその他のオンラインリソースへのリンクなど、ユーザーまたはリソースに関するさまざまな種類の情報が含まれます。ユーザーとの安全な接続を確立するために使用できるユーザーの公開鍵など、その他の種類の情報を含めることもできます。

こちらにも優れた解説があります。そのページから:

誰かがMastodonであなたを検索すると、あなたのサーバーは次のようなエンドポイントを使用してアカウントを照会されます:

GET https://${MASTODON_DOMAIN}/.well-known/webfinger?resource=acct:${MASTODON_USER}@${MASTODON_DOMAIN}

Mastodonのユーザー名は@で始まるため、@[email protected]のようになります。Twitterなら@[email protected]のように、私は今@[email protected]になれます!

Searching for me with Mastodon

つまり https://www.hanselman.com/.well-known/webfinger?resource=acct:[email protected] のような形です

私のレスポンスは次のようになります

{
"subject":"acct:[email protected]",
"aliases":
[
"https://hachyderm.io/@shanselman",
"https://hachyderm.io/users/shanselman"
],
"links":
[
{
"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}"
}
]
}

このファイルはapplication/jrd+jsonのMIMEタイプで返される必要があります

私のサイトはASP.NET Razor Pagesサイトなので、Startup.csで次のようにして、そのwell known URLを必要なJSONを返すページ/ルートにマッピングしました。

services.AddRazorPages().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/robotstxt", "/Robots.Txt"); //i did this before, not needed
options.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger");
options.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger/{val?}");
});

次にwebfinger.cshtmlを次のように作成しました。Razorのため、@@サイトを二重エスケープする必要があることに注意してください。

@page
@{
Layout = null;
this.Response.ContentType = "application/jrd+json";
} { "subject":"acct:[email protected]", "aliases": [ "https://hachyderm.io/@@shanselman", "https://hachyderm.io/users/shanselman" ], "links": [ { "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}" } ] }

これは静的なレスポンスですが、複数の人のページをホストする場合はURLにユーザー名を受け取り、それらをエイリアスにマッピングして正しく返すようにする必要があります。

さらに簡単な方法として、自分のMastodonサーバーのwebfingerレスポンスのJSONファイルをそのまま使い、静的なJSONファイルとして保存して自分のサーバーにコピーすることもできます!

サーバーがそのwell known URLから正しいJSONを返せば、機能します。

これは私のテンプレートです https://hachyderm.io/.well-known/webfinger?resource=acct:[email protected] 現在ホストされている場所から。

Mastodonを始めるには、こちらからどうぞ。 https://github.com/joyeusenoelle/GuideToMastodon/ 2007年頃のTwitterのような感覚で、誰にも所有されておらず、ActivityPubのようなWeb標準に基づいています。

お役に立てれば幸いです!

About Scott

Scott Hanselmanは元教授、金融分野の元チーフアーキテクトで、現在は講演者、コンサルタント、父親、糖尿病患者、そしてMicrosoftの従業員です。彼は失敗したスタンドアップコメディアン、コーンロウアー、そして書籍の著者でもあります。

facebook bluesky subscribe
About   Newsletter

Hosting By
Hosted on Linux using .NET in an Azure App Service