sql >> データベース >  >> NoSQL >> MongoDB

MERNスタックのようなWebおよびAPIソリューションを認証および承認するための最良の方法は何ですか?

    最適な承認戦略は、短期的または長期的なアプリケーションの範囲によって異なります。

    プライベートログインを使用したモノリシックまたはシンプルなWeb

    たとえば、1つの単純なバックエンド(api rest)を備えた単純な(MERN)Web、またはこのようなモノリシックアプリケーションがある場合マーンの例 組織内での内部ログインまたはプライベートログインを使用すると、承認戦略は次のように単純になる可能性があります:

    • (1 *)/ login express routeは、ユーザー/パスワードを受け取り、データベースでそれらを検証し、ユーザーがアクセスできる必要のある古典的なjwtトークンとオプションの配列(reactルート)を返します。
    • ウェブアプリ(react)は、ルートが受信したルートと一致するページをレンダリングする必要があります
    • ウェブアプリは、受信したトークンをAPIRESTエンドポイント呼び出しに送信する必要があります
    • apiがreactwebから呼び出しを受信するとき、ヘッダーとしてのトークンの存在を検証する必要があります。存在しない場合は、403エラーを返す必要があります。
    • (2 *)トークンが存在する場合は、それを検証する必要があります(整形式、有効期限が切れていない、正しい署名など)。
    • (3 *)有効なトークンの場合は、最後の検証を実行する必要があります。「ゲスト」ロールを持つユーザーがDELETEを実行できるかどうか エンドポイントへ/user/100
    • (4 *)従来の解決策は、データベースにuser、roles、user_roles、role_permission、permission_optionなどのテーブルを含めることです。オプションテーブルには、すべてのAPIエンドポイントとそのメソッドが登録されている必要があります。また、これを使用して、ユーザー<:>Webルート間の関係を作成することもできます。 これ を確認してください

    最新の要件

    現代および大規模な組織には以下が必要です:

    • ソーシャルネットワークログイン
    • 内部/外部ユーザー
    • インタラクティブログインではありません(ロボット、スケジューラなど)
    • いくつかのウェブアプリ
    • いくつかのモバイルアプリ
    • 多くのApiRest

    この場合、MERNアプリはオールインワンであるため、適切な選択ではありません。以前の要件を実装するための一般的な戦略は、複数のアーティファクトを複数のサーバーにデプロイすることです。

    • ウェブアプリ(react、vue、angular、linkstartなど)
    • apis rest(nodejs + expres、java、pythonなど)
    • 認証/承認:oauth2プラットフォーム/プロバイダー、ID/アクセスプラットフォームなど

    この場合は、MERNアプリをいくつかのデプロイ可能なアーティファクト(ウェブ、API、セキュリティ)に分割する必要があります。

    Oauth2

    ログインだけに関心がある場合でも、Web、API、場合によってはモバイルアプリの認証と承認を確実にする方法に関係なく、次のものが必要になります:OAUTH2

    (1 *)、(2 *)、(3 *)y(4 *)を考慮して独自のセキュリティプラットフォームを開発するか、次のようなものを使用できます。

    • auth0
    • keycloackなど

    詳細はこちら: https://stackoverflow.com/a/62049409

    あなたの質問

    • どちらの方法が良いと思いますか?
      • auth0を使用すると、時間と労力を節約できると思います。 auth0では、/ login、/ callbackなどのエンドポイントを備えたシンプルなエクスプレスアプリが必要です。または、auth0 + passport.jsを使用する場合、これらのエンドポイントはpassport.jsによって管理されます
      • パスポートの有無にかかわらずauth0を使用する前に、OAUTH2フローがどのように機能するかを確認することをお勧めします。このリンク とても助かりました。
    • 2と3の違いは何ですか
      • 私が読んだように、auth0と別のプラットフォームは、ユーザー管理サービスを提供するか、ユーザーサービス(AD / LDAP、データベース、APIなど)に接続できます。だから
    • パスポートにルールを実装する方法はありますか(たとえば、最初のログイン時に新しいユーザーをリダイレクトする)
      • はい。パスポートの有無にかかわらず、nodejsでコールバックがリダイレクトされるときにロジックを追加できます。
    • MongoDBでPassportを実装し、データベースに数百人のユーザーがいる場合、どうすればそれらを管理できますか?
      • 現在、データベースは多くの行をサポートしています。したがって、本番データベースでは、最適化または監視してみてください。もう1つのオプションは、データベース管理者を雇ってこれらのタスクを実行することです。

    参考資料




    1. MongoDB:パスで見つかった位置(つまり'$')要素が多すぎます

    2. Dockercomposeでコマンドを1回実行する方法

    3. MongoDBはクエリに対して許可されていません-コード13

    4. bashスクリプトを介してMongoコマンドを実行すると、クエリの実行に失敗しました