概要
Bluesky の OAuth は AT Protocol に基づいており、GitHub や Google などの通常の Socialite プロバイダーとは大きく異なります。通常の OAuth との違い
認証フロー
インストールと設定
秘密鍵の作成
まず秘密鍵を生成します。これは Bluesky への登録なしに行えます。.env にコピーします。
Bluesky の場合、
client_id や client_secret の登録は不要です。秘密鍵の設定だけで OAuth 認証を使えます。デフォルトのOAuthスコープ
パッケージは3つの主要なユースケースをサポートするデフォルトのOAuthスコープで設定されています。- Socialiteログイン —
atproto、account:email、include:app.bsky.authViewAllでユーザー認証とメールアクセスを有効にします - 投稿 —
include:app.bsky.authCreatePostsとblob:*/*で投稿の作成と画像・動画のアップロードを許可します - DM通知 —
rpc:chat.bsky.convo.sendMessageとrpc:chat.bsky.convo.getConvoForMembersで通知用のダイレクトメッセージ送信を有効にします
BLUESKY_OAUTH_SCOPE 環境変数を設定することでスコープをカスタマイズできます。
ローカル開発
デフォルトではhttp://localhost と http://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 を呼び出せます。トークンの自動更新
リフレッシュトークンは一度しか使えないため、更新後は必ずDBに保存し直す必要があります。OAuthSessionUpdated イベントを使います。
OAuthSessionRefreshing イベントも発行されます。この時点で refresh_token が無効になるため、DBから削除しておくと安全です。
WithBluesky トレイト
User モデルにWithBluesky トレイトを追加し tokenForBluesky() を実装すると、$user->bluesky() で認証済みクライアントを取得できます。
client-metadata のカスタマイズ
パッケージはbluesky.oauth.client-metadata と bluesky.oauth.jwks のルートを自動で定義します。通常変更は不要ですが、OAuthConfig でカスタマイズできます。
未認証時の動作
OAuthSession が null またはリフレッシュトークンがない場合、Unauthenticated 例外がスローされ login ルートへリダイレクトされます。
Source: docs/socialite.md