🦋
honoを使ってBlueskyのサブドメイン ハンドル認証を実装しといた
自分のドメインはあるけど、Bluesky(bsky)で使いたいハンドルが異なる場合に使える hono サーバーを実装してみましたので、もし条件が合ったら使ってみてください。
要するに、私がサイト bar.tld を運営していることでそこそこ有名な foo というハンドルの人だとすると、このコードがお役に立つかもしれません。
-
@bar.tld
として Bluesky を使いたいわけではない - ハンドルは
foo
から始まってほしい - ハンドルが
@foo.bar.tld
なら最高か - foo.bar.tld というサブドメインは今まで使ったことがない
上記を満たしている場合は、ぜひ使ってみてください! @foo.bar.tld
というハンドルを https://foo.bar.tld
で認証して、Bluesky で使えるようにしましょう。
使う技術を紹介
Bluesky のハンドル認証
サブドメインを Bluesky ハンドルとして認証する際に特にわかりやすくて便利なのは、Bluesky に生成された文字列を該当サブドメインの /.well-known/atproto-did
から返す方法です。
hono
API などに人気の web フレームワーク。
Cloudflare Worker
Cloudflare 社が提供しているサーバーレス関数のサービスです。hono で作ったシンプルなアプリならすごくデプロイしやすいと思います。
実装と使い方
hono で、二つのエンドポイントを持つアプリを実装します:
-
/.well-known/atproto-did
: 該当の Bluesky ハンドルの認証に必要な DID 文字列を返す -
/
: 訪れたユーザーを任意の URL に転送する
コードは極めてシンプルです:
import { Hono } from "hono";
import { env } from "hono/adapter";
const app = new Hono();
app.get("/.well-known/atproto-did", (c) => {
const { BSKY_DID } = env<{ BSKY_DID: string }>(c);
return c.text(BSKY_DID);
});
app.get("/", (c) => {
const { REDIRECT_URL } = env<{ REDIRECT_URL: string }>(c);
return c.redirect(REDIRECT_URL);
});
export default app;
必要なもの
-
Cloudflareアカウント、もしくはアプリをデプロイできる別の方法
- 該当ドメインの DNS を Cloudflare で管理しているとなおやりやすい
- パッケージ管理には pnpm を使っている前提で書いています
-
プロジェクトのコード
- GitHub アカウントが必ずしも必要ではない
- Fork →
git clone
の流れの代わりに zip ファイルをダウンロードして進めても良い
- Fork →
- GitHub アカウントが必ずしも必要ではない
- Bluesky が期待する、該当のサブドメインをハンドルとして認証するための DID 文字列が必要
- Bluesky にログインしてアカウント設定を開く
- 「ハンドル」をクリックする
- 「自分のドメインを持っています」をクリックする
- 「使用するドメインを入力してください」を埋める
- 「DNS パネルがない場合」を選択する
- 「その内容は以下の通りです:」に出てくる DID 文字列を控える (
did:plc:
から始まる)
自分のものにする
wrangler.toml
に設定や環境変数を貼ります:
name = "karawapo-alecrem-com"
main = "src/index.ts"
compatibility_date = "2024-11-29"
routes = [
{ pattern = "karawapo.alecrem.com", custom_domain = true }
]
[vars]
BSKY_DID = "did:plc:h4rnbdanbl3u2czpvkbve2se"
REDIRECT_URL = "https://alecrem.com/"
下記の箇所を書き換える必要がある:
- Cloudflare Worker に任意の名前をつける:
name = "karawapo-alecrem-com"
- 希望の Bluesky ハンドルを貼る(
@
なし):pattern = "karawapo.alecrem.com"
-
BSKY_DID
: Bluesky で取得した DID 文字列を貼る -
REDIRECT_URL
:/
へのリクエストをどこに転送したいか
依存関係をインストールしてローカルサーバーを回す
pnpm install
pnpm run dev
- http://localhost:8787 への HTTPS 要求が指定した転送用 URL に転送されることを確認する
- http://localhost:8787/.well-known/atproto-did への HTTPS 要求が希望のハンドルの DID 文字列を返すことを確認する(私の DID 文字列ではなくて)
Cloudflare Worker としてデプロイ
pnpm run deploy
- Cloudflare アカウントにログインする必要がある
- コードを変えるたびにデプロイし直すことができる
Cloudflare Worker にカスタムドメインを設定する
- Cloudflare アカウントにログインしたまま、左側にナビゲーションメニューから「Workers & Pages」を開く
- 作った Worker を選択して開く
- Worker の「設定」タブを開く
- 「ドメインとルート」セクションにある「+ 追加」ボタンをクリックする
- 開くペインで「カスタム ドメイン」を選択する
-
wrangler.toml
に貼った通りの Bluesky ハンドルを貼る - 「ドメインを追加」をクリックして、設定を完了させる
-
https://foo.bar.tld
への HTTPS 要求が指定した転送用 URL に転送されることを確認する -
https://foo.bar.tld/.well-known/atproto-did
への HTTPS 要求が希望のハンドルの DID 文字列を返すことを確認する(私の DID 文字列ではなくて)
Bluesky 上でハンドルを設定する
- Bluesky にログインしてアカウント設定を開く
- 「ハンドル」をクリックする
- 「自分のドメインを持っています」をクリックする
- 「使用するドメインを入力してください」を埋める
- 「DNS パネルがない場合」を選択する
- 「テキストファイルを確認」をクリックする
おわりに
このちょっとしたプロジェクトのおかげで、hono と Cloudflare Workers を初めて使うことになりました。もし触ったことがないようでしたら、使ってみるのがいかがでしょうか?
Discussion