Skip to content

Note

このドキュメントは2026-02-27 02:59PLaMo Translation Modelを使用して自動翻訳されました。

FEP-2c59: ActivityPubアクターからのWebfingerアドレス発見方法の提案

概要

[Webfinger][Webfinger]プロトコルは、fediverseにおいて[ActivityPub][ActivityPub]アクターのURL形式の違いを抽象化し、統一的な方法でアクターを参照可能にする技術です。Webfingerアドレスを使用することで、クライアントは対応するActorのActivityPub URLを取得できます。本仕様では、逆方向の処理方法を明示的に定義しており、ActivityPubアクターURLから優先すべきWebfingerアドレスを発見する手法を提供します。

背景

[ActivityPub][ActivityPub]は、分散型ソーシャルネットワークを実現するためのプロトコルです。このプロトコルでは、HTTPS URLを用いてアクター(個人、組織、アプリケーション、およびグループ)を識別します。

現在、これらのURL形式は標準化されておらず、多様なバリエーションが存在します。例えば、activitypub.exampleドメインにおいてユーザー名evanを使用する場合、そのActor URLとして以下の形式が考えられます:

  • ドメイン内パス形式:https://activitypub.example/users/evan
  • ID番号を含む形式:https://activitypub.example/users/1234
  • ソーシャルデータ専用サブドメイン形式:https://social.activitypub.example/evan
  • ユーザーごとに個別のサブドメインを使用する形式:https://evan.activitypub.example

[Webfinger][Webfinger]プロトコルは、インターネット上の人物を識別するための発見プロトコルです。Webfingerアドレスはメールアドレス風の形式で表現され(例:user@activitypub.example)、このプロトコルに従うことで、クライアントはそのアドレスに対応する人物に関する情報を取得できます。これには、該当するActivityPub Actor URLも含まれます。

この発見プロセスは一方向であり、ドメイン境界を越えて実行可能です。このため、ネットワーク上のアクターを本人の同意なしに識別する際、誤解を招くような、あるいは有害な用途に利用される可能性があります。例えば、idiot.exampleの所有者がpompous@idiot.exampleというWebfingerアドレスを作成し、これをhttps://activitypub.example/users/evanを指すように設定するといったケースが考えられます。

さらに、ActivityPubサーバーがUI上でアクターのWebfingerアドレスを表示する場合、特定のActor IDに対してどのWebfingerを優先すべきかを判定する信頼性の高い方法が必要となります。

この問題を解決するため、[Mastodon][Mastodon]ではアクターのプロフィールからpreferredUsernameを抽出し、それをアイデンティティURLのドメイン名に付加することで正規化されたWebfingerアドレスを構築しています。その後、このアドレスを用いてWebfingerルックアップを実行し、返されたActor URLが元のIdentity URLと一致する場合、そのWebfingerアドレスを採用するという手法を採用しています。

しかし、この方法には特定のActor URLに対して問題が生じる可能性があります。第一に、preferredUsernameはActivityPub Actorに必須のプロパティではありません。

第二に、サブドメインや代替ドメインを使用したActor URLの管理が困難になります。例えば、元々のWebFingerがevan@organization.exampleで、対応するActivityPub URLがhttps://social.organization.example/evanの場合、正規化されたアドレスはより長いevan@social.organization.exampleとなります。同様の問題は、アクターURLがユーザーごとに個別のサブドメインを使用する形式(例:https://evan.organization.example/)を採用している場合にも発生します。

本仕様では、プロパティ値やURL解析に依存することなく、ActivityPubアクターからWebfingerアドレスを発見する手法を定義しています。これにより、ドメイン所有者は自身の登録済みドメインを使用してWebfingerアドレスを管理でき、ActivityPubサーバーをサブドメインまたは別ドメインで運用することが可能になります。Mastodon方式は、フォールバック手段として引き続き利用可能です。

仕様

  • ActivityPubアクターには、当該Actorに対する正規化されたWebfingerアドレスを示すwebfingerプロパティを含める必要があります(SHOULD)。
  • webfingerプロパティは機能的であり、各Actorに対して最大でも1つのwebfingerプロパティしか存在してはなりません。
  • webfingerプロパティにURLが指定されている場合、そのリンクデータは直接的にActor URLを参照するものでなければなりません(リダイレクトやエイリアスを介さずに、verbatimな形式で)。
  • webfingerプロパティ内のアイデンティティは、プレーンなWebfingerアドレス形式(例:user@domain.example)であることが望ましいです。
  • webfingerプロパティ内のアイデンティティは、acct: URL形式(例:acct:user@domain.example)であっても構いません。

適用範囲

本仕様書の参照文書はhttps://purl.archive.org/socialweb/webfingerであり、その内容は以下のように定義されています:

{
  "@context": {
    "wf": "https://purl.archive.org/socialweb/webfinger#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "webfinger": {
      "@id": "wf:webfinger",
      "@type": "xsd:string"
    }
  }
}

使用例

パブリッシャーはアクターのwebfingerプロパティを以下のように含めることができます:

{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.archive.org/socialweb/webfinger"
    ],
    "id": "https://social.example.com/evanp",
    "type": "Person",
    "name": "Evan Prodromou",
    "inbox": "https://social.example.com/evanp/inbox",
    "outbox": "https://social.example.com/evanp/outbox",
    "following": "https://social.example.com/evanp/following",
    "followers": "https://social.example.com/evanp/followers",
    "liked": "https://social.example.com/evanp/liked",
    "webfinger": "evanp@example.com"
}

アクティビティのactorプロパティで参照されるPersonオブジェクトに対しても、webfingerプロパティを含めることが可能です:

{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.archive.org/socialweb/webfinger"
    ],
    "id": "https://social.example.com/evanp/activity/775",
    "to": ["Public"],
    "type": "Like",
    "summary": "Evan liked a note",
    "actor": {
        "type": "Person",
        "name": "Evan Prodromou",
        "id": "https://social.example.com/evanp",
        "webfinger": "evanp@example.com"
    },
    "object": {
        "type": "Note",
        "id": "https://social.example.com/other/note/221",
        "to": ["Public"]
    }
}

acct:プレフィックス付きのActorに対しても、webfingerプロパティを含めることができます:

{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.archive.org/socialweb/webfinger"
    ],
    "id": "https://prefix.example/urlfan",
    "type": "Person",
    "name": "URL Fan",
    "inbox": "https://prefix.example/urlfan/inbox",
    "outbox": "https://prefix.example/urlfan/outbox",
    "following": "https://prefix.example/urlfan/following",
    "followers": "https://prefix.example/urlfan/followers",
    "liked": "https://prefix.example/urlfan/liked",
    "webfinger": "acct:urlfan@prefix.example"
}

セキュリティに関する考慮事項

webfingerプロパティの信頼性は極めて重要です。第三者が意図的または非意図的に他のアクターのwebfingerプロパティを偽装する可能性があります。このプロパティは、当該Actorのid URLから直接取得された場合、あるいはActivityPubプロトコルを介して[HTTP Signature][HTTP Signature]とともに提供された場合に限り、当該Actorの優先Webfingerアドレスとして扱うべきです。

参考文献

著作権

CC0 1.0 Universal(CC0 1.0)パブリックドメイン献呈

本Fediverse Enhancement Proposalの著者らは、法律で認められる範囲内において、当該著作物に関するすべての著作権および関連権利を放棄しています。