Skip to main content

概要

Bluesky の OAuth は AT Protocol に基づいており、GitHub や Google などの通常の Socialite プロバイダーとは大きく異なります。
Bluesky の OAuth は他の Socialite プロバイダーとは実装が根本的に異なります。DPoP(Demonstrated Proof of Possession)と PAR(Pushed Authorization Requests)エンドポイントを使用します。client_secret は不要で、代わりに秘密鍵を使います。

通常の OAuth との違い

認証フロー

インストールと設定

秘密鍵の作成

まず秘密鍵を生成します。これは Bluesky への登録なしに行えます。
出力された値を .env にコピーします。
Bluesky の場合、client_idclient_secret の登録は不要です。秘密鍵の設定だけで OAuth 認証を使えます。

デフォルトのOAuthスコープ

パッケージは3つの主要なユースケースをサポートするデフォルトのOAuthスコープで設定されています。
  1. Socialiteログインatprotoaccount:emailinclude:app.bsky.authViewAll でユーザー認証とメールアクセスを有効にします
  2. 投稿include:app.bsky.authCreatePostsblob:*/* で投稿の作成と画像・動画のアップロードを許可します
  3. DM通知rpc:chat.bsky.convo.sendMessagerpc:chat.bsky.convo.getConvoForMembers で通知用のダイレクトメッセージ送信を有効にします
BLUESKY_OAUTH_SCOPE 環境変数を設定することでスコープをカスタマイズできます。
利用可能なスコープの詳細については、AT Protocol Permission Requestsドキュメントを参照してください。

ローカル開発

デフォルトでは http://localhosthttp://127.0.0.1:8000/ が設定されているため、ローカル開発では追加の設定は不要です。

本番環境

ルート名 bluesky.oauth.redirect が存在する場合、.env への設定は不要です。デフォルトのルート名を変更した場合は設定します。

ルート設定

コールバックルートのルート名は bluesky.oauth.redirect を推奨します。パッケージがこの名前を内部で使用します。

ローカル開発でのコールバック処理

ローカル開発中は、Bluesky からのコールバック URL が http://127.0.0.1:8000/ に固定されます。ルートレベルで振り分けると便利です。

コントローラー実装

ユーザー情報(OAuthSession)

$user->session から取得できる OAuthSession の主なメソッドを示します。 全プロパティを確認するには toArray() を使います。

データベース設定

users テーブルに Bluesky 固有のカラムを追加します。DID が Bluesky ユーザーの一意識別子です。

OAuthSession の再利用

セッションに保存した OAuthSession を使って API を呼び出せます。
Job や Console など Laravel セッションが使えない場合は、DBからデータを取得して OAuthSession を組み立てます。

トークンの自動更新

リフレッシュトークンは一度しか使えないため、更新後は必ずDBに保存し直す必要があります。OAuthSessionUpdated イベントを使います。
リフレッシュ開始時には OAuthSessionRefreshing イベントも発行されます。この時点で refresh_token が無効になるため、DBから削除しておくと安全です。

WithBluesky トレイト

User モデルに WithBluesky トレイトを追加し tokenForBluesky() を実装すると、$user->bluesky() で認証済みクライアントを取得できます。

client-metadata のカスタマイズ

パッケージは bluesky.oauth.client-metadatabluesky.oauth.jwks のルートを自動で定義します。通常変更は不要ですが、OAuthConfig でカスタマイズできます。

未認証時の動作

OAuthSession が null またはリフレッシュトークンがない場合、Unauthenticated 例外がスローされ login ルートへリダイレクトされます。
最終更新日 2026年4月29日