BlueskyアプリのOAuth認証画面でアプリ名をドメインにしたい

@anon5r.com

前書き

Blueskyアプリを開発しているときに、OAuthを利用することも一般的になりつつあります。

開発者はOAuth画面で表示されるのは、メタデータで自分が定義したアプリ名ではなく、OAuthクライアントのメタデータがおかれたURLのフルパスが表示されるシーンに遭遇することになると思います。

OAuth認証画面(Concent)でアカウントに求める権限確認画面の表示にも使用されるメタデータですが、JSONフォーマットで書かれたものがオンラインで参照可能であれば基本的にどこに置いてあっても良い事になっており、パスの指定もファイル名の指定も特段ありません。

が、そうするとアプリ名の部分にはこのメタデータのURLフルパスが表示されます。これ自体は特段問題ないですが、せっかくなので自分のアプリ名、せめてドメインで表示されて欲しいものです。

実際に一部アプリを見ていると、フルパスで表示されているアプリと、ドメインだけの表示になっているアプリがあります。

この違いは何か。この問題を調べるべく、我々はGitHubリポジトリのジャングルに旅立った────。

TL;DR

OAuthクライアントメタデータのURLを https://{your-app.example.com}/oauth-client-metadata.json として公開し、指定すればアプリ名はドメイン名となる。

packages/oauth/oauth-provider-ui

OAuth関連のUI実装があるのはこの辺りになります。

OAuth Concent画面の例

この中で上記のコンセント画面を出しているのは packages/oauth/oauth-provider-ui/src/views/authorize/consent/consent-view.tsx

https://github.com/bluesky-social/atproto/blob/main/packages/oauth/oauth-provider-ui/src/views/authorize/consent/consent-view.tsx

ここから辿ると <ConcentForm />が表示箇所の様子。

さらに concent-form.tsx を辿るとどうやら <ClientName /> がクライアント名を表示していそう。

packages/oauth/oauth-provider-ui/src/views/authorize/consent/consent-form.tsx

packages/oauth/oauth-provider-ui/src/components/utils/client-name.tsx を見ると

packages/oauth/oauth-provider-ui/src/components/utils/client-name.tsx https://github.com/bluesky-social/atproto/blob/2203d825e8a4db41858de74b5413e7efbe80c3d2/packages/oauth/oauth-provider-ui/src/components/utils/client-name.tsx#L54-L65

<UrlViewer />でクライアント名としてURLの表示の制御していそう。 少し前の実装を見ると isConventionOAuthClientId()が鍵になっていそう。

packages/oauth/oauth-provider-ui/src/lib/oauth-client.ts を見ると答えがありました。

packages/oauth/oauth-provider-ui/src/lib/oauth-client.ts https://github.com/bluesky-social/atproto/blob/2203d825e8a4db41858de74b5413e7efbe80c3d2/packages/oauth/oauth-provider-ui/src/lib/oauth-client.ts#L12-L13

答え

メタデータのURLが特定のパスに配置されていることで表示が変わるようです。

条件

  • メタデータのURIプロトコルが https: である。
  • メタデータのパスが /oauth-client-metadata.json である

追記

https://bsky.app/profile/yamarten.bsky.social/post/3mhxrd7s5h26n

ご指摘いただいた通りドキュメントにも記載がありました。 https://atproto.com/ja/guides/scopes#clients

ただ、ドキュメント内では

もし oauth-client-metadata.json の代わりに client-metadata.json を使用している場合、この変更により認可フローのページでURL文字列ではなくドメインを表示させることができます。

と記載があるのですが、この記述は実装側と異なっており /oauth-client-metadata.json のパスにしておく必要があります。

anon5r.com
anon

@anon5r.com

ⓘ This user has been reported to be noisy on your timeline.
SWE in Japan. NOT anonymous.

私は好きにする。君も好きにしたらいい。
ゲーム( #FF14, #SDVX, #Splatoon ) をしたりBlueskyの何かを作ったりします
予約投稿サービスを作りました 👉 chronosky.app
https://linkat.blue/board/anon5r.com

Post reaction in Bluesky

*To be shown as a reaction, include article link in the post or add link card

Reactions from everyone (0)