AtCoderProblems icon indicating copy to clipboard operation
AtCoderProblems copied to clipboard

GitHub認証を行う範囲が広すぎる

Open hotate29 opened this issue 2 years ago • 0 comments

現在の実装では、WebAPIへの全てのリクエストをGithubAuthenticationミドルウェアに通しています。

https://github.com/kenkoooo/AtCoderProblems/blob/ff203e2dc12fece1e5c85dfcbd92db7312313634/atcoder-problems-backend/src/server/mod.rs#L19-L41

このミドルウェアは、Cookieにtokenが含まれている時に動作するもので、GitHubのWebAPIにリクエストを送ることでtokenを検証しています。

https://github.com/kenkoooo/AtCoderProblems/blob/ff203e2dc12fece1e5c85dfcbd92db7312313634/atcoder-problems-backend/src/server/middleware/github_auth.rs#L123-L151

https://github.com/kenkoooo/AtCoderProblems/blob/ff203e2dc12fece1e5c85dfcbd92db7312313634/atcoder-problems-backend/src/server/middleware/github_auth.rs#L69-L81

この検証には結構時間がかかっているようで、ログイン時とそうでない時を比べると、大体250msの差があります。

URL token 平均時間(範囲)
/atcoder-api/v3/user/ac_rank?user=hotate29 なし 107ms(89~135ms)
/atcoder-api/v3/user/ac_rank?user=hotate29 あり 361ms(306~440ms)
/atcoder-api/v3/user/rated_point_sum_rank?user=hotate29 なし 106ms(98~122ms)
/atcoder-api/v3/user/rated_point_sum_rank?user=hotate29 あり 361ms(309~505ms)
/internal-api/user/get (当然)あり 363ms(299~409ms)

(hyperfineを使って、curlでリクエストを10回飛ばして計測しました)

/internal-apiに属しているエンドポイントにGithubTokenを提供するのが目的ですが、それを必要としない他のエンドポイントへのリクエストでも関係なく検証が行われるのでパフォーマンス的に問題かもしれません。

Lambdaの料金体系はよく知らない(ms単位の実行時間で課金されるらしい程度)のですが、これをどうにかしたら費用面が少し良くなるかも?と思いました。

どうにかする方策としては

  • 各エンドポイントで検証を行う
  • GitHubのAPIの使用をやめる
  • internal-apiのスコープを作って、その中でGithubAuthenticationミドルウェアを使うようにする

といったものがあって、おそらく最後のものが無難かなあと思います。

hotate29 avatar Feb 14 '23 15:02 hotate29