OAuthスコープの実装
OAuthフローはセッションで付与されるアクセスのレベルを表す「スコープ」を必要とします。現時点では、権限の粒度はbsky.socialホスティングサービスやセルフホスト型PDSディストリビューション上に実装されています。権限セットに関する作業(レキシコン解決を含む)は進行中です。開発者はより細かい権限(例えば特定のレコード種別やAPIエンドポイントの権限のみを要求するアプリ)を実装できるようになるでしょう。多くのアプリは、利用できるようになったら、より分かりやすい言語で権限を示す高レベルの「権限セット」を使用すると予想されます。
BlueskyでサインインするためにサードパーティのATアプリが要求すべき最小限のOAuth権限は次のとおりです。
atproto
Blueskyのプロフィール情報を利用したいなら、以下も必要になることがあります。
rpc:app.bsky.actor.getProfile?aud=did:web:api.bsky.app#bsky_appview
アップロードした画像や動画を作成するレコード(投稿)に紐づける必要がある場合、以下も必要です。
blob:*/*
atprotoにおけるOAuthスコープの使い心地はまだ発展途上です。この最小セットは、不要な権限を与えずにアプリ開発者が使える出発点を提供するよう設計されています。詳細な権限スコープを最終決定するまで、暫定的な粗い粒度のスコープ(「移行スコープ」)もサポートしています。現時点では、移行スコープまたはアプリパスワードの使用を廃止する計画はありません。これら移行スコープの概要やOAuthの詳細については認可スコープを、細かな権限スコープについては権限を参照してください。
クライアント
OAuthクライアントソフトウェアはグローバルに一意なclient_idで識別されます。クライアントソフトウェアの各バリアントは異なるclient_idを持つことがあります。例えば同じソフトウェアのブラウザ版とAndroid(モバイル)版は異なるclient_idを持つかもしれません。client_idは、クライアントメタデータJSONドキュメントが取得できる完全修飾のウェブURLでなければなりません。例えばhttps://app.example.com/oauth-client-metadata.jsonのようなものです。client_idに関する追加情報:
- W3CのURL仕様に従った正しい形式のURLである必要があります
- スキーマは
https://でなければならず、ポート番号を含めてはいけません。開発用にはhttp://localhostのclient_idに対する特別な例外がある点に注意してください。 - パスに
oauth-client-metadata.jsonを含める必要はありませんが、慣例としては役立ちます。
もしoauth-client-metadata.jsonの代わりにclient-metadata.jsonを使用している場合、この変更により認可フローのページでURL文字列ではなくドメインを表示させることができます。
認可フローのページは付与される関連権限をすべて表示します。これは細分化されたスコープを使うアプリでも、移行スコープを使うものでも同様です。
クライアントアプリは認可フロー中に実際に承認された認可スコープを必ず確認してください。特にアカウントのメールアドレス読み取り権限(account:email)を要求した場合、ユーザーはその権限だけを拒否して他の権限を承認する可能性があります。理論上は個別の権限が拒否された上で、リクエスト全体としては承認されることがあり得ます。