
Nginx フロントエンドの背後の 2 つの場所に 2 つのバックエンドがあります。バックエンド A は OAuth による認証を実装しています。バックエンド B は実装していません。
場所 B に認証を追加する簡単な方法は、まず各リクエストをバックエンド A に送信することだと思います。私が考えているフローは次のとおりです。
request for /b/kitten.png --> [ nginx ]
[ nginx ] --> request for /index.html --> [backend A]
if A responds 200:
[ nginx ] --> request for /kitten.png --> [backend B]
otherwise return what A returned (redirect to OAuth)
これは Nginx で可能ですか? できない場合は、OpenResty/HAProxy/Traefik で可能でしょうか?
答え1
完全な回答ではありませんが、コメントするには少し長すぎます。
あなたが説明したセットアップは、概念的にはかなり一般的な戦略に似ています。
- 認証を1つのシステムにオフロードする
- リバースプロキシを使用して、認証されたクライアントのみが他のアプリケーション/バックエンドにアクセスできるようにします(リクエストを検査することにより)
- 認証されていないクライアントはリバース プロキシによって拒否されます (理想的には認証プロバイダーからのログイン ページにリダイレクトされ、認証に成功するとアプリにリダイレクトされます)
- 認証されたクライアントにはアクセスが許可されます。
これには、リバース プロキシでクライアントが送信するヘッダー/Cookie/セッション トークンを検証する方法が必要です。もちろん、リバース プロキシによって公開されるアプリケーションが独自のログイン/認証方法を提供する必要がないという利点があります。
nginx の場合、このようなメソッドを作成するには、少しの lua コードを使用するのが一般的な方法のようです。
例えば、 access_by_lua
この方法は、認証プロバイダーとして nginx と keycloak を統合するためによく使用されます。例を参照してください。ここそしてここ