2017-05-05 12 views
0

NodeJS、Express、MongoDBでSaaS APIを開発しています。 JWT認証/セキュリティ方法を実装しています。RESTful APIのユーザ権限を確認

私の個人的なケースでは、私は今のところ2つのコレクションUserとClientを持っています。

enter image description here

あなたが(目的を定義するための)各コレクションが持つフィールドを表示することができます。すなわち

これはまさに私が「ポイントでクライアントを挿入するには:

  • /API /ユーザー/ {userIdを} /クライアント:だから、エンドポイントのデザインの面で、私はそうtrully安らかなアプローチを使用しています価格プランがユーザーにそれを許可するかどうかをチェックするために新しいクライアントをポストする前に、私が望むことをもたらす。ロジックの面では:私の疑問の点で

    function post(req,res){ 
        // Check if the JWT user.id is the same of the endpoint request 
        if(req.user._id == req.params.id){ 
         // Here I want to know which is the price plan and to count the Clients that the user has 
    
        } 
    } 
    

    私はいくつかの仮説に考えているが、私は本当に最高である1かわからない:

    • は、ユーザーのコレクションにクエリを実行し得ます価格プラン、クライアントコレクションのクエリカウントを検証し、新しいクライアントを投稿します。
    • ユーザーの料金プラン情報をJWTに入れ、ユーザーのクライアントコレクションのクエリカウントで検証して新しいクライアントを投稿します。

    これらは私が考えた2つの主な解決策ですが、私は実装/実行する必要のあるセキュリティとパフォーマンスを賢明に疑っています。

    ありがとうございます。

答えて

1

私は同じ疑問を持っています。また、トークンに何かを入れた場合、情報が変更されると、それらのトークンを再発行するか(ユーザーのログインとログアウトを行う必要があります)、複雑なトークン更新ロジックを実装する必要があります。また、アプリケーションが進化する:今日あなたは価格が必要で、明日は別のものが必要です。すべてのユーザーのトークンを毎回変更する(実際にはディストリビューターストレージとして使用する)ことはおそらく良い考えではありません。それで、JWTを可能な限り短く保つ方が良いのです。

あなたの質問はより多くの意見に基づいていますが、私自身の意見では、私は間違いなくuserId(必要に応じて+メタ情報)だけをjwtに保存します。しかし、アプリの特定のものではありません。データベースからの読解は道のりです。

+0

もう一度Sergey、私はあなたの意見を非常に高く評価します。私の具体的なニーズを分析すると、このワークフローでは3つのクエリが必要ですが、オーバーヘッドではないと思いますか?はい、私の困難は、今のところコードワイズではありませんが、実際にはアーキテクチャーや意思決定が賢明です。そのような知識だけを得るのは難しいです。 – Ricardo

+0

私は個人的にルールを持っており、それを社内に強制するので、300ms以内に何らかの応答を与える必要があります。これは上限ですが、もちろん可能な限り多くの速度が必要です。一方、私は個人的には、最適化をミクロの最適化と最適化に分割しています。マイクロ最適化では時間がかかりますが、結果は時間を費やす価値がありません。私が取り組んでいた以前のプロジェクトの1つは、1ページごとにレンダリングするために約400 dbのクエリを作成しました。そしてまだ働いていた。この場合の3つのクエリは考えても価値がありません。しかし、あなたの場合はあなたが決める。 –

関連する問題