MastodonのWEB_DOMAINとLOCAL_DOMAINが違う時どうやって前者から後者をresolveするのか
TL;DR: acct:@username@WEB_DOMAINで https://WEB_DOMAIN にwebfingerを投げるとsubjectがacct:@username@LOCAL_DOMAIN で返ってくるので、ドメインが違ったら https://LOCAL_DOMAIN に同様の webfinger を投げ直すことで解決する。
Mastodon は @bob@bob.example を acct として使いながらMastodon自体は mastodon.bob.example に配置することができる。
この時 bob.example の管理者は https://bob.example/.well-known/webfinger を https://mastodon.bob.example/.well-known/webfinger にproxyすることを要求される。
が、 @bob@bob.example から mastodon.bob.example が引けるのは webfinger でわかるとしても、ActivityPub において例えば bob の投稿URL https://mastodon.bob.example/@bob/12345 のようなURLからどうやって @bob@bob.example を引くのか、というのが気になったので、検証用に構築してある ローカル Fediverse で確かめる。
実際に Mastodon の検索欄から ActivityPub オブジェクトのresolveを実行すると、まずそのオブジェクトを取りに行く。
(http:// になっているのは mitmproxy の刺し方の都合上なので気にしないでほしい)
https://gyazo.com/59cdea1062883ab66b4d307b6d544d35
そして知らない ID が attributedTo になっているので、それを解決しに行く。
https://gyazo.com/447db8c6c23346bb1ca63cf234d6b94c
解決して preferredUsername が admin であるということを知ったら、次は webfinger でその acct を引く。
https://gyazo.com/4f345787753c41a3c9bc754ad8669f66
すると subject が別ドメインな webfinger が返ってくるので:
https://gyazo.com/3fc63731e609ed14003ec6be9b4ba697
subject の acct に使われているドメインで再度webfingerを投げ直す
https://gyazo.com/1d0db43b75d2d13526aa6bc187daeb3d
ちなみに /.well-known/webfinger が 404 だと /.well-known/host-meta でwebfingerの場所を確認するらしい
https://gyazo.com/90c5109dd75a19538358041e9cb689a5
host-meta で WEB_DOMAIN のwebfingerに返されても:
https://gyazo.com/7f901f823749dedb5ef11cb29eea8598
ちゃんとWEB_DOMAINのwebfingerで@LOCAL_DOMAINなacctが解決できるなら:
https://gyazo.com/9fa6b82a43834e9b618532a0698feba1
そのまま LOCAL_DOMAIN が採用される
https://gyazo.com/6fe87d61eac3d109eea8fa5a6c9a1205
ちなみに何らかの理由で https://LOCAL_DOMAIN/.well-known/host-meta で意図したものが返ってこないとオブジェクトの解決が失敗する (勝手に @user@WEB_DOMAIN になったりはしない)
そのうち調べる: WEB_DOMAIN は1つだけどユーザーごとに LOCAL_DOMAIN があるみたいなことはできるのか?
例えば @alice@alice.example も @bob@bob.example も 実態は https://mastodon.example にあるというような
Mastodon そのままだとそういうサーバーを作れないと思うので自分で実装する必要がありそう
ところで Misskey はガン無視して @WEB_DOMAIN になってしまう
おまけ: あとから LOCAL_DOMAIN を WEB_DOMAIN にすると??
@WEB_DOMAIN で検索され直したところで webfinger の再resolveが走って @LOCAL_DOMAIN から移行されるっぽい (ID はそのまま)
→ WEB_DOMAIN を変えなければ案外なんとかなる?