Upgrade to Pro — share decks privately, control downloads, hide ads and more …

atproto spaces概要

Avatar for yamarten yamarten
August 22, 2026

atproto spaces概要

ATプロトーク 2026-07-19 + 2026-08-16
https://www.bluecast.app/user/@yamarten.bsky.social

Avatar for yamarten

yamarten

August 22, 2026

More Decks by yamarten

Other Decks in Technology

Transcript

  1. 構成要素 クライアント spaceアクセスのOAuthスコープを持つ syncer PDS (repo host) ※認可サーバーは割愛 所属ユーザーのpermissioned repositoryを

    保持する space host spaceのアクセス権や全体設定を管理する syncer spaceのデータを保持するクライアント 用途的にはappviewに近い space user1 user2 space A space A PDS PDS PDS PDS user.example.com public space A space B
  2. 書き込み ① クライアントが自PDSに書き込み クライアントはOAuth認証済みとする syncer ④ ⑤ ③ ② PDSはpermissioned

    repositoryを更新 ③ PDSからspace hostに更新通知 ④ space hostからsyncerに更新通知(任意) ⑥ space PDS PDS PDS PDS ⑤ syncerが対象PDSにデータ要求(任意) 必要に応じてspace hostにPDS一覧を要求 syncerはspaceアクセス権を獲得済みとする ⑥ syncerが対象PDSからデータ取得(任意) ① ②
  3. 読み出し ① クライアントがPDSにspaceアクセスを要求 ② PDSはscopeを確認し、delegation token発行 syncer space ③ クライアントがspace

    hostにspaceアクセス を要求 delegation tokenに加え、client attestationも使う場合がある PDS ③ ④ space hostが独自の基準で判断し、space credentialを発行 ⑤ クライアントが各メンバーPDSにデータ要求 ⑥ PDSが要求されたpermissioned dataを返却 ① ② PDS PDS ④ PDS ⑤ ⑥
  4. 認証 認証情報 発行者 OAuth access token auth server (多くの場合PDS) delegation

    token readerの所属PDS client attestation readerクライアント space credential space host 検証者 何を示すか 標準寿命 reader/writerの 対象spaceに対応する 2週間 所属PDS スコープ有無 (最大180日) space host アクセスを要求して いるアカウント space host 未規定 アクセスするアプリ (例では1分) 各メンバーPDS spaceアクセス許可 1分 (任意) 2時間 (任意) space hostによる認証の基準は実装依存である点に注意 space credentialには部分的な許可は無く、常にspace全体を読める
  5. 識別子 at://did:example:host/ space/example.space/ 3mszi3sr7ssdl permissioned dataやspaceはat-uriを持つ at://{spaceDid}/space/{spaceType}/{skey}/ {authorDid}/{collection}/{rkey} syncer spaceDiD:

    space authority(≒管理者)のDID space user1 user2 space A space A spaceType: spaceのlexiconを示すNSID 具体的なlexicon型は後述 skey: space host内のspaceを識別するキー PDS PDS PDS PDS user.example.com public space A space B 構文はrkeyと同じ(つまり典型的にはTID) その他: permissioned data所有者(≠space host)のDID/collection/rkey at://did:example:host/ space/example.space/ 3mszi3sr7ssdl/ did:example:user/ com.example.data/ 3mt3rtakxef22
  6. at-uriからrecord取得フロー 1. spaceDidを解決し、DIDドキュメントからspace host情報を取得 #atproto_space_hostおよび#atproto_spaceがあればそれを使う 無ければ#atproto_pdsと#atprotoを使う 2. space hostからspace credentialを取得

    目的がspace情報の場合はここでspace hostのAPIを使って終わり 3. authorDidを解決し、DIDドキュメントからPDS情報を取得 4. space credentialを使ってPDSからrecord取得 つまり、PDSがspace hostの場合は、authorDidに何も手を加えずに spaceDidとしても使うことができる
  7. space type lexiconで宣言し、spaceが持てるcollectionやskeyの型を決める collectionはヒントであって強制力は無い点に注意 nameはOAuth承認時に提示され、多言語化できる descriptionは開発者向けの用途説明で、ユーザーには見えない { } "lexicon": 1,

    "id": "com.atmoboards.forum", "defs": { "main": { "type": "space", "description": "A discussion forum", "key": "any", "name": "AtmoBoards Forum", "name:lang": { "es": "Foro AtmoBoards", "ja": "AtmoBoards 掲示板" }, } } "collections": ["com.atmoboards.thread", "com.atmoboards.reply"]