2017-03-10 1 views
0

背景:ファイルサーバーを作成しています。私はNginxのリバースプロキシの背後にあるTomcatを使用しています。私はUIと多くのエッジサーバーをホストしているメインサーバーを持っています。そこには、ユーザーがアップロードしたファイルを保存しておきたいと思っています。それはプライベートなファイルストレージなので、ファイルアップローダだけがアップロードされたファイルをダウンロードできるはずです。サーバー間のユーザー要求を検証する

問題:セッションを作成してユーザーのアカウントにログインし、ユーザーからのさらなる要求(通常のもの)を検証するためにメインサーバー上のユーザーを認証します。この情報はエッジサーバーには適用されません。エッジサーバーは任意の要求にファイルを提供します。それは私が望むものではありません。私はファイル所有者にのみダウンロードを許可したいと思います。

ここでは、エッジとメインサーバーがセッションを分散しているクラスタとして構成するTomcatクラスタリングを回避しようとしています。サイトはSSLでサポートされています。メインサーバーに既にログインしている(セッションを作成した)ユーザーからファイルダウンロード要求がエッジサーバーに届いたときに、ユーザーのログインステータスを検証する方法はありますか?

+0

信頼境界はどこにありますか?メインからエッジへのリクエストにuserIdが含まれていて、そのファイルを提供する前にエッジを確認できるか、特定のユーザーが許可されていない場合は401 Unauthorizedを返すことができますか?または、サーバー(管理者、通信事業者、従業員など)にアクセスできるユーザーに対しても、できるだけ安全なユーザーファイルを作成する必要がありますか。 – diginoise

+0

何かの間に。 userIdは、ある人が推測できるほど弱すぎます。ファイルへの管理アクセスを拒否するには、ファイル所有者のみが知っているキーを使用してファイル全体を暗号化し、クライアントブラウザで解読する必要があります。私が望むのは、(所有者以外の)いくつかの人がファイルを直接使用してインターネット経由でダウンロードするのを防ぐためです。 – printfmyname

+1

あなたは何らかの形でエッジサーバーのセキュリティトランザクションを認識させる必要があります...セッションの有効期限がメインサーバーの秘密キーで暗号化されたクッキー。エッジサーバーはメインの公開鍵を使用してCookieを復号化します。 – diginoise

答えて

1

私はあなたが「主張に基づく認証」またはリソースアクセストークンの形式を使用することができます

を使用することができますいくつかのアプローチを参照してください。

クレームベース認証 - たとえば、必要な情報(ユーザーID、アカウントID、承認、有効期限など)を含み、(サーバーとファイルサーバーの間の)共有秘密またはメインサーバーの秘密キーによって署名されたJWTトークン。

エッジサーバーは、メインサーバーに接続せずにハッシュまたは署名に基づいてトークンを検証できるという利点があります。欠点は、ユーザーが要求されたリソースにアクセスできるかどうかを判断するロジックが必要であることです。

参照:https://jwt.io/

リソースアクセストークン - いくつかのクラウド・ストレージ・プロバイダーを使用しているこのアプローチ(AWS S3、IBMはストレージ、...オブジェクト) - 主なサイトはいくつかの追加のパラメータを使用して、リソースのURLを返します。 - 例えばアカウント、ナンス、有効期限、署名。リソース(エッジ)サーバーは有効期限と署名をチェックし、リソースを提供または拒否する必要があります

利点は、エッジサーバーが認証を気にせず、認証と承認がメインサーバーの範囲内にあることです。欠点は、提供されるリソースURLの有効期限が限られていることです。

参照:http://s3-expiry.50projects.com/

注:

  • リソースサーバは、SAMLを使用したことを除いて、ユーザーがログインしているかどうか確認できません効果的にメインサーバと通信しないかもしれないという条件を入れますセッション管理を使用するSLO(シングルログアウト)またはOIDCを使用するSSO
+0

JWTはプロンプトを見て、Javaライブラリも持っています。ありがとうございました。あなたの回答と@diginoiseで、エッジサーバーでユーザーを認証するためのスキーマを構築できます。私はこのスレッドを数日だけ開いたままにして、誰かがより良いソリューションを投稿しているかどうかを確認します。Gabriel – printfmyname

関連する問題