スコープ付き API キーの使用

API キーを使用すると、Discourse を他のシステムと統合したり、さまざまな動作を自動化したりできます。ただし、大きな力には大きな責任が伴います。悪意のあるアクターが API キーにアクセスできた場合、機密データにアクセスしたり、サイトに変更を加えたりする可能性があります。これを緩和し、セキュリティの追加レイヤーを提供するため、スコープを使用して API キーが実行できる動作を制限できるようになりました。

スコープと許可されるパラメータ

新しい API キーを作成する際、使用するスコープを選択できます。:grey_question: アイコンの上にマウスを合わせると、その動作に関する簡単な説明が表示されます。:link: ボタンをクリックすると、そのスコープに関連付けられた URL が表示されます。

任意で、受け入れられるパラメータを指定することもできます。複数の値はカンマで区切ってください。

既存のキーの移行

この機能追加時に、既存のキーは「グローバル」キーとして扱われました。スコープ付きのキーに移行するには、既存のキーを無効化し、新しいキーを作成する必要があります。

カスタムスコープの追加

プラグインは add_api_key_scope メソッドを呼び出すことで、カスタムスコープを追加できます。

resource は関連するスコープをグループ化するために使用されるシンボルです。一方、action は以下の属性を持つハッシュです。

  • actions: 許可されるコントローラーアクションのリスト。形式は controller_name#method_name です。
  • methods: 許可する HTTP メソッドのリスト(例: %i[get])。コントローラーアクションではなく HTTP メソッドで一致させる場合は、actions の代わりにこれを使用してください。
  • params: 許可されるパラメータ名のリスト。
  • aliases: 許可されるパラメータの別の名前を含むハッシュ。

基本スコープの定義方法を知りたい場合は、以下のリンクを参照してください。

「いいね!」 24

カテゴリの取得で読み取り専用 API キーを使用すると 403 レスポンスが返されるようです。

curl -X GET "https://mysite/categories.json" \
-H "Api-Key: mykey" \
-H "Api-Username: system"

この API キーにはトピックの「read」と「read_list」権限が付与されています。例えば、同じキーで /top.json は動作します。また、‘Global Key’ を使用するとこのエンドポイントは正常に動作します。

カテゴリとトピックのリストを読み取るために、API キーをクライアントに格納したいと考えています。そのため、読み取り専用のキーを使用することが重要です!

何かヒントはありませんか?

「いいね!」 1

興味深いことに、認証情報を一切使用しない場合は動作します!

k
つまり、curl -X GET "https://mysite/categories.json" のように実行します。

「いいね!」 1

残念ながら、利用可能なエンドポイントが非常に多いため、デフォルトではほんのいくつかのスコープのみを含めています。将来的に新しいスコープを追加する可能性もありますが、それまでの間は、ご自身のニーズに合わせて拡張する必要があります。

スコープ付きの API キーを使用する場合、選択したスコープに含まれていないエンドポイントを呼び出すと動作しません。受け入れられる URL を確認するには、:link: ボタンをクリックしてください。

これは公開サイトのみに有効です。また、ログインしておらず、十分な権限を持っていない限り、プライベートカテゴリなどの情報は表示されません。

「いいね!」 6

さらなるスコープの提案を受け付けていますか?

当サイトのAPIを利用して、他サイトがメールアドレスからユーザーの存在を確認し、該当する場合はグループに追加したいと考えています。信頼できるサイト(親組織内の他サイト)ですが、必要なアクセス権限のみを付与するように制限できるのであれば、それが賢明な選択肢だと考えます。

「いいね!」 1

プラグイン用のAPIが公開されたことをとても嬉しく思います。まずはプラグインから始め、それがコアに組み込めるかどうかを確認してみましょう。

「いいね!」 2

一般的に有用なスコープであれば、PR を歓迎します。例えば group_membership.edit はどうでしょうか?

「いいね!」 5