Fediverseに参加するための最低条件1

FediverseからActivityPubを喋るアカウントとして認識されること

webfingerなどFediverseからアカウントとして認識されるのに必要なファイル

以下の5つのファイルが必要

  1. nodoinfo
  2. nodoinfo/2.1
  3. host-meta
  4. webfinger
  5. 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

Menu