Note
このドキュメントは2026-02-27 03:38にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-4adb: webfingerを用いた識別子のデリファレンス処理
概要
本FEPでは、ActivityPubにおける使用を目的として、webfinger技術を利用したURIのデリファレンス処理を形式的に定義する。主な目的は、acct:user@domain形式やdid:example:12345形式のURIをActivityPubで使用されるオブジェクトのIDとして利用可能にすることである。このFEPでは主にアクター(actor)を対象として説明するが、一般的なオブジェクトにも適用可能である。円滑な導入を図るため、まずはアクターオブジェクトから展開を開始することを推奨する。
本FEPではまずアルゴリズムと具体例を提示した後、Fediverse環境における具体的な利用ケースについて論じる。つまり、最初の2セクションはこのFEPを実装しようとする開発者向けであり、それ以降のセクションではこのFEPを採用する価値があるかどうかを検討したいユーザー向けである。
アルゴリズム
[Webfinger]技術を用いることで、URIとドメインからなるペアに対応するActivityStreamsオブジェクトを関連付けることができる。この処理は以下の手順で実施される:
GET https://domain/.well-known/webfinger?resource={URI}リクエストを送信する。"type":"application/activity+json"プロパティを持つリンク要素を特定する。- 当該オブジェクトを実際に参照(デリファレンス)する。
この処理によって得られるオブジェクトはActivityStreams(URI, domain)と表記する。URIを解決する場合、以下の2つのケースが存在する:
- URIが明示的にドメインを指定している場合(
domain(URI)で示されるドメインを使用する) - URIがドメインを特定できない場合
ケース1では、明らかにActivityStreams(URI, domain(URI))を当該URIに関連付ける。ケース2の場合、URIが出現したドキュメントの@id属性に関連するドメインを使用する。もしそのドキュメントがPOSTリクエストによって受信され、id属性が含まれていない場合、あるいはid自体がURI形式である場合は、POSTリクエストの送信元ドメインを使用することとする。この場合、必ずURIとオブジェクトの関連性を検証する必要がある。この検証はFEP-c390などで規定されている方法によって実現できる。
具体例
まずacct URIスキームについて説明する。以下のアクティビティデータを配信する場合:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Follow",
"actor": "https://chatty.example/ben/",
"object": "acct:alyssa@social.example",
"to": "acct:alyssa@social.example",
}
ActivityPubサーバはActivityStreams("acct:alyssa@social.example", "social.example")のルックアップ処理、すなわち以下のHTTPリクエストを実行する必要がある:
GET https://social.example/.well-known/webfinger?resource=acct:alyssa@social.example
次にDIDsについて考察する。
次のアクティビティデータにおける著者を特定する場合:
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://chatty.example/ben/456",
"type": "Note",
"attributedTo": "did:key:z6MkekwC6R9bj9ErToB7AiZJfyCSDhaZe1UxhDbCqJrhqpS5",
"to": "acct:alyssa@social.example",
"content": "Hello"
}
URI did:key:z6MkekwC6R9bj9ErToB7AiZJfyCSDhaZe1UxhDbCqJrhqpS5を解決する必要がある。当該URIにはドメイン情報が含まれていないため、IDから導出されるドメイン、すなわちchatty.exampleを使用する。したがって、以下のリクエストを送信する:
GET https://chatty.example/.well-known/webfinger?resource=did:key:z6MkekwC6R9bj9ErToB7AiZJfyCSDhaZe1UxhDbCqJrhqpS5
得られたActivityStreamsオブジェクトには以下が含まれるべきである:
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://chatty.example/bnm789",
"attachment": {
"type": "VerifiableIdentityStatement",
"subject": "did:key:z6MkekwC6R9bj9ErToB7AiZJfyCSDhaZe1UxhDbCqJrhqpS5",
"alsoKnownAs": "https://chatty.social/bnm789",
"proof": { ... }
},
...
}
FEP-c390に準拠することで、benがこのDIDを使用する権限を持っていることを検証可能となる。
背景説明
まずActivityPubの第3.1節を参照する。同節は以下の記述で始まる:
[ActivityStreams]におけるすべてのオブジェクトは、一意のグローバル識別子を持つべきである。
ここで注意すべき点として、[ActivityStreams]文書中に「一意」という語は明示的には登場しない。また、この用語が何を意味するのか、以下の2つの解釈が可能である:
- URI自体が唯一無二であることを要求している場合
- IDとドメインの組み合わせがシステム全体でユニークであることを求めている場合
ケース1では、明らかにActivityStreams(URI, domain)を当該URIに関連付ける。ケース2の場合、URIが出現したドキュメントの@id属性に関連するドメインを使用する。もしそのドキュメントがPOSTリクエストによって受信され、id属性が含まれていない場合、あるいはid自体がURI形式である場合は、POSTリクエストの送信元ドメインを使用することとする。この場合、必ずURIとオブジェクトの関連性を検証する必要がある。この検証はFEP-c390などで規定されている方法によって実現できる。
参考文献
- [acct URIスキーム] P. Saint-Andre RFC 7565, 2015年
- [ActivityPub] Christine Lemmer Webber, Jessica Tallon, ActivityPub, 2018年
- [ActivityStreams] J. Snell, E. Prodromou, ActivityStreams, 2017年
- [alsoKnownAsとacct:] SocialHubにおける[alsoKnownAs and acct:]に関する議論(https://socialhub.activitypub.rocks/t/alsoknownas-and-acct/3132?u=helge)
- [did-core] Manu Sporny, Dave Longley, Markus Sabadell, Drummond Reed, Orie Steele, Christopher Allen, Decentralized Identifiers(DIDs)v1.0, 2022年
- [did-method-key], Dave Longley, Dmitri Zagidulin, Manu Sporny, did-method-key 2022年
- [FEP-c390] silverpill, FEP-c390, 2022年
- [FEP-612d] Helge, FEP-612d 2023年
- [MastoGuide] jippi Mastodonにおける独自ドメインを使用した発見可能性の向上方法
- [Webfinger] P. Jones, G. Salgueiro, M. Jones, J. Smarr, RFC 7033, 2013年
著作権について
本Fediverse拡張提案の著者は、法律で許容される範囲内において、当該著作物に関するすべての著作権および関連権利を放棄し、パブリックドメインに寄贈する。