数千件のユーザーAPIリクエストと無効化

ダッシュボードのセキュリティレポートで、今年の4月から毎日数千件のユーザーAPIリクエストが発生していることに気づきました。

これは非常に奇妙で、私の予想とは100倍から1000倍も異なります。

キーをリクエストしている上位ユーザーや、どのユーザーがどれだけのAPIリクエストを生成しているかについての詳細なレポートを取得するにはどうすればよいですか?キーに読み取り/書き込みリクエストアクセスがある場合、誰かがリモートでトピック/投稿を読み書きできると仮定しています。リモートサイトが投稿をスクレイピングしている可能性がありますか?

また、すべてのユーザーAPIキーをグローバルに無効化/期限切れにする方法はありますか?

「いいね!」 1

確認ですが、ユーザーAPIリクエストについて質問されていますか?それとも、サイトの管理者/APIページで生成したAPIキーを使用して実行されたAPIリクエストについてですか?ユーザーAPIリクエストは、以下のスクリーンショットで緑色でハイライトされています。

ユーザーAPIキーが何に使用されるかの詳細は、こちらにあります: https://meta.discourse.org/t/user-api-keys-specification/48536。

Discourseサイトと統合するアプリを作成していない限り、最も可能性の高い説明は、ユーザーがDiscourseHubアプリ (https://play.google.com/store/apps/details?id=com.discourse&hl=en&gl=US&pli=1) を介してサイトにログインしているか、または Fig - Native Discourse client for iOS のようなアプリを使用してサイトとやり取りしているかのどちらかです。

これはあなたの質問すべてに答えるものではありませんが、以下のData ExplorerクエリでユーザーAPIキーの使用状況の概要を確認できます。

SELECT * FROM user_api_keys

サイトにUser APIキーリクエストを行っているアプリケーションのリストと、各アプリケーションでリクエストを行っているユーザー数を取得するには次のようにします。

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

DiscourseHubアプリから接続するために使用されているUser APIキーの場合、application_nameは「Discourse - unknown」に設定されます。

ユーザーがUser APIキーを使用してサイトとやり取りする場合、アプリのエントリが設定ページの[セキュリティ]タブに追加されます。

エントリには、アプリに付与されたスコープが表示されます。また、アプリへのアクセスを取り消すこともできます。

Discourse UIからすべてのUser APIキーを期限切れにしたり取り消したりする方法は見つかりません。ユーザーの設定ページから1つずつキーを取り消すオプションしかありません。RailsコンソールからすべてのUser APIキーを取り消すことは可能ですが、まずキーがどのように使用されているかを調査する価値があるでしょう。

「いいね!」 1

はい、ユーザーAPIリクエストです。

「いいね!」 1

DiscourseHub アプリからのリクエストが多すぎるようです。サイトに Data Explorer がインストールされている場合は、このクエリの結果について教えていただけますでしょうか。

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

このクエリを自分のテストサイトでテストしましたが、DiscourseHub アプリからの user_api_request は 1 件だけでした。複数のアプリから Discourse に接続する複数のユーザーを処理するためにクエリを正しく構成したと思いますが、結果に何かおかしい点があれば教えてください。

「いいね!」 1

データエクスプローラーのインストールに時間がかかりました。何らかの理由で再構築が失敗しました。

表示されているのは次のとおりです。

application_name user_count
Discourse - xhanse’s iPhone X 1
Discourse - iPhone 1
Discourse - xrett’s iPhone 2
Discourse - xave’s iPhone 1
Discourse - xixu’s iPhone 1
Discourse - xevin’s GS8 1

一部の名前はマスクしました。これはほんの一部のユーザーの情報のように見えます。クエリは特定の期間の情報を返していますか?数人のユーザーに対して数千件のAPIリクエストがあるのは、私には過剰に見えます。また、1人のユーザーが2つの user_count を持っているように見えますが、それは(彼/彼女が)2つのAPIキー(つまり、2つのアプリ)を持っていることを意味しますか?

「いいね!」 1

それについては2つの可能性があります。ユーザーが同じデバイス名のiPhoneを2台持っているか、またはアプリをアンインストールして再インストールしたかのいずれかです。どちらの場合も、複数のAPIキーを持つことになります。

「いいね!」 1

いいえ、すべての有効なユーザーAPIキーの詳細を返しています。

以下のクエリを試してください。

SELECT * FROM user_api_keys

7行しか返されないと仮定します。そうでない場合はお知らせください。

必ずしもそうではありません。ユーザーがDiscourseHubアプリ経由でサイトにアクセスすると、サイトへのリクエストはユーザーAPIリクエストとしてカウントされます。ユーザーの何人かが積極的にサイトを閲覧している場合、1日で2,000件のリクエストを生成する可能性があります。

はい、その通りです。項目は7つしか表示されません。

これは問題ないということでしょうか。文脈がわからないのですが、これはフォーラムが通常処理する負荷としては正常なのでしょうか?

すべて私には理にかなっています。参考までに、本日DiscourseHubアプリ経由でテストサイトに短時間ログインしました。サイトにはほとんどコンテンツがありません。数分間サイト内を閲覧し、36件のUser APIリクエストを生成しました。スクロールするコンテンツがたくさんあるサイトでは、1人のユーザーが1日で大量のリクエストを生成しても不合理ではありません。

それでも懸念がある場合は、Data Explorerプラグインを使用して、このリクエストから返されたuser_idを持つユーザーのアクティビティを確認できます。

SELECT * FROM user_api_keys
「いいね!」 1

好奇心に負けて、DiscourseHubアプリ経由でほぼ独占的に使用しているサイトを確認しました。そのサイトから過去24時間で1100件近くのユーザーAPIキーリクエストがありましたが、アクティブなキーを持つユーザーは私だけです。:slight_smile:

「いいね!」 2