Skip to content

Note

このドキュメントは2026-02-27 03:38PLaMo 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オブジェクトを関連付けることができる。この処理は以下の手順で実施される:

  1. GET https://domain/.well-known/webfinger?resource={URI}リクエストを送信する。
  2. "type":"application/activity+json"プロパティを持つリンク要素を特定する。
  3. 当該オブジェクトを実際に参照(デリファレンス)する。

この処理によって得られるオブジェクトはActivityStreams(URI, domain)と表記する。URIを解決する場合、以下の2つのケースが存在する:

  1. URIが明示的にドメインを指定している場合(domain(URI)で示されるドメインを使用する)
  2. 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つの解釈が可能である:

  1. URI自体が唯一無二であることを要求している場合
  2. IDとドメインの組み合わせがシステム全体でユニークであることを求めている場合

ケース1では、明らかにActivityStreams(URI, domain)を当該URIに関連付ける。ケース2の場合、URIが出現したドキュメントの@id属性に関連するドメインを使用する。もしそのドキュメントがPOSTリクエストによって受信され、id属性が含まれていない場合、あるいはid自体がURI形式である場合は、POSTリクエストの送信元ドメインを使用することとする。この場合、必ずURIとオブジェクトの関連性を検証する必要がある。この検証はFEP-c390などで規定されている方法によって実現できる。

参考文献

著作権について

本Fediverse拡張提案の著者は、法律で許容される範囲内において、当該著作物に関するすべての著作権および関連権利を放棄し、パブリックドメインに寄贈する。