Fediverseに参加するための最低条件1
FediverseからActivityPubを喋るアカウントとして認識されること
webfingerなどFediverseからアカウントとして認識されるのに必要なファイル
以下の5つのファイルが必要
- nodoinfo
- nodoinfo/2.1
- host-meta
- webfinger
- type:PersonのJSONファイル
【各ファイルの役割】
nodeinfo
nodeinfo/2.1のurlを知らせる。
nodeinfo/2.1
どんなサーバーなのかを知らせる→activitypubを喋るサーバーです、ということを知ってもらう。
host-meta
webfingerのurlを知らせる。
webfinger
type:PersonのJSONファイルのURLを知らせる。
type:PersonのJSONファイル
webfingerで問い合されたアカウントの情報を返す。ここで初めてFediverseのアカウントとして認識されることになる。
各ファイルはHTTPヘッダーにContent-typeでmimetypeを指定する必要がある。
nodeinfo、nodeinfo/2.1、webfinger、type:PersonのJSONは「Content-Type: application/json」
host-metaは「Content-Type: application/xml」
わたしはよくわからなかったんで、perlで動的にmimetypeを指定したけど、apacheのconfや.htaccessでmimetypeを設定することもできる。
1)nodeinfo
URL:https://YOUR-DOMAIN/.well-known/nodeinfo
URLに対するアクセスに、以下のjsonを返して、「href」nodeinfo/2.1のURLを知らせる。
{
"links":[
{
"rel": "http://nodeinfo.diaspora.software/ns/schema/2.1",
"href": "https://YOUR-DOMAIN/nodeinfo/2.1"
}
]
}
2)nodeinfo2.1
URL:https://YOUR-DOMAIN/nodeinfo/2.1
(ファイル名はnodeinfo2.1.jsonなどとして、上記URLへのアクセスをhtaccessでリダイレクトしている)
URLに対するアクセスに、以下のjsonを返してサーバーについて、を知らせる。
「protocols」に「activitypub」
「software」の「name」はMastodonだったりMisskeyだったり、わたしの場合は「tokoroten」
「usage」の「users」「total」は、ひとりで使うので「1」
「metadata」でもう少し詳細情報。
{
"openRegistrations": false,
"protocols": [
"activitypub"
],
"software": {
"name": "tokoroten",
"version": "0.1.0"
},
"usage": {
"users": {
"total": 1
}
},
"services":{
"inbound": [],
"outbound": []
},
"metadata": {
"nodeName":"サーバーの表示名",
"nodeDescription":"perlによる自作実装のお一人様ActivityPubサーバーです",
"features":[ "circle" ]
},
"version": "2.1"
}
3)host-meta
URL:https://YOUR-DOMAIN/.well-known/host-meta
URLへのアクセスに対して、以下のxmlを返す。「template」でwebfingerのurlを知らせる。
<?xml version="1.0"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Link rel="lrdd" type="application/xrd+xml" template="https://YOUR-DOMAIN/.well-known/webfinger?resource={uri}" />
</XRD>
4)webfinger
URL:https://YOUR-DOMAIN/.well-known/webfinger?resource={uri}
{uri}の部分はアカウント。
具体的には、以下。メールアドレスのようなものになる「@アカウント名@サーバードメイン名」。
https://YOUR-DOMAIN/.well-known/webfinger?resource=acct:@USER-NAME@YOUR-DOMAIN
(https://YOUR-DOMAIN/.well-known/webfinger?resource=acct%3A%40USER-NAME%40YOUR-DOMAIN)
https://webfinger.net/
こちらで実際に検索することができる。
アカウントが見つかったら、「href」でアカウント情報(JSON)へのurlを返す。
{
"subject": "acct:USER-NAME@YOUR-DOMAIN",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://YOUR-DOMAIN/USER-NAME"
}
]
}
5)type:PersonのJSON
URL:https://YOUR-DOMAIN/USER-NAME
(ファイル名はactor.jsonなどとして、上記URLへのアクセスをhtaccessでリダイレクトしている)
アカウント情報のJSONを返す。
これで初めてFediverseのアカウントと認識されて、MastodonやMisskeyなどのサーバーで「@アカウント@サーバードメイン名」を検索するとアカウントが表示される。
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1"
],
"discoverable":true,
"id": "https://YOUR-DOMAIN/USER-NAME",
"type": "Person",
"url": "https://YOUR-DOMAIN/USER-NAME",
"inbox": "https://YOUR-DOMAIN/USER-NAME/inbox",
"outbox": "https://YOUR-DOMAIN/USER-NAME/outbox",
"followers": "https://YOUR-DOMAIN/USER-NAME/followers",
"following": "https://YOUR-DOMAIN/USER-NAME/following",
"name": "アカウント表示名",
"preferredUsername": "USER-NAME",
"summary": "<p>説明文<br />ここで使えるhtmlタグは限られているので<br />シンプルなもの推奨</p>",
"sharedInbox": "https://YOUR-DOMAIN/inbox",
"icon": {
"type": "Image",
"mediaType": "image/jpeg",
"url": "https://YOUR-DOMAIN/images/prof-image.jpg"
},
"image": {
"type": "Image",
"mediaType": "image/png",
"url": "https://YOUR-DOMAIN/images/cover-image.png"
},
"publicKey": {
"id": "https://YOUR-DOMAIN/USER-NAME#main-key",
"owner": "https://YOUR-DOMAIN/USER-NAME",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n+Y51TMAWw8+uuuZeru6KyQRgcno1tYGi8ZC+mG3B5OaknRO7mw41qA70DC7r3Xqr\noguRlTc2R2Xes6iPs0/wfPCs7PmUI8NMFEzV+sg4MOcgLQvaJ2mnNBgcNCQshVqo\n-----END PUBLIC KEY-----\n"
}
}
【アカウントJSONの補足】
「YOUR-DOMAIN」を自分のドメインに、「USER-NAME」を自分のアカウント名にして見てもらえれば、呪文でだいたいOKです。
inboxが一番のキモとなる
Fediverseで飛びかうActivity(投稿やフォロー申請、いいね、ブロックなどなど)は、すべてこのアカウントのinboxにPOSTでリクストが投げこまれる。
Activityに応じたリアクションを約束事どおりに返すことでFediverseは成り立っている。
publicKeyは設定が、必須of必須
Fediverseでのリクエストはすべて署名されていることが前提。
「秘密鍵」「公開鍵」を作成して、ここでは「公開鍵」を記入します。
[2024-10-25 01:07:06] v1.0.1
[2024-10-23 19:26:02] v1.0