分散システムの認証オプション
私は、互いにシンフォニーで機能する3つのコンポーネントを設計しているところです。 BasicAuthすべての呼び出しでHTTPS を必要とするRESTful Webサービスであり、これが実際に私のシステムのすべての重労働を実行します(作業を行います) エンドユーザーのアクションを上記のWebサービスへのAPI呼び出しに変換するWeb UI。したがって、UIはWSによって「サポートされます」 開発者がローカルでインストールして実行できるコマンドラインインターフェイス(CLI)ツール。コマンドをWSへのAPI呼び出しに変換します(したがって、これもWSによって「サポートされています」)。 私が乗り越えようとしている最初のハードルの1つは、認証と承認に関するものです。 WSがLDAP /ディレクトリサービス(ADまたはおそらくApache DSなど)を認証レルムとして使用しているとしましょう。つまり、API呼び出しがネットワーク経由で(たとえば、あるHTTPS GETリソースの)BasicAuth受信されると、資格情報が要求から抽出され、LDAPサービスに転送されて、これが有効なユーザーであるかどうかが判断されます。認証されている場合、特定のユーザーが HTTPSリクエストで試行していることを実行できるかどうかを判断するために、別の認証レルム(おそらくデータベース)が使用されているとしましょう。ここまでは順調ですね。 CLIツールの場合、ユーザーはコマンドを実行する前に認証を受ける必要があります。したがって、単一のユーザーは常に同じCLIインスタンスを操作するだけなので、このモデルは問題なく機能します。 Webアプリケーション(UI)をWSと統合しようとすると、問題が発生します。なぜなら、多くの人が同時にアプリにログオンする可能性があり、すべて異なるアクセス許可で、許可されている基本的なAPI呼び出しを指示するためです。 私の知る限り、それを見て、それが見えます私はここが、4つのオプションを持っているように: キャッシュされた資格情報:アプリにログインした後、資格情報が何らかの形であり、どこかで(アプリはそれらへのアクセスを持っているように)キャッシュされた、とアプリが認可ポリシー自体の任意の種類を強制しません。ユーザーが内部でAPI呼び出しを生成することをしようとすると、資格情報がキャッシュから検索され、API呼び出しで転送されます。WSが承認されていないと判断した場合、WSはエラーを返します。 サービスレベルアカウント:アプリとWSはどちらも同じ認証/承認レルムを使用しますが、Web UIは、ユーザーがアプリ内で実際に表示および実行できるものに承認を適用するようになりました。基盤となるAPI呼び出しを生成する何かを実行することが許可されている場合、アプリmyapp-admin-userはユーザーに代わって各API呼び出しでサービスアカウントの認証情報(など)を送信します。 OAuthv2:OAuthが何であるか、またはこのシナリオに適用できるかどうかはわかりませんが、どういうわけかここでの解決策になると思います。 トークンサーバー:サービスレベルのアカウントオプションと同様の方法で、CASやKerberos などのトークンサーバーを使用してユーザーを保証します。ここで、ユーザーがアプリに正常にログインすると、トークンサーバーはアプリにセッションUUIDを送り返し、そのUUIDをWSに登録します。アプリがAPI呼び出しを生成するたびに、UUIDをリクエストに付加し、それがWS側で検証されます。 「Cached Credentials」オプションは、セキュリティ分野で優れていて健全なすべてのものの逸脱のように感じられます。資格情報をどこにでもキャッシュするのは間違っていると感じるだけです。 「Token Server」オプションは、SSOタイプのセットアップでは有効のようですが、この特定のケースでは有効ではないため、私には不便に感じられます。また、セッションUUIDの概念と BasicAuth / HTTPSを同時に使用する良い方法はないと思います。 したがって、これは私が何も知らないOAuthv2と、残りの唯一のオプションとして「サービスレベルアカウント(SLA)*」を残します。SLAオプションは問題ないようですが、次のようないくつかの欠点があります。 サービスアカウントには、基本的にWSに対する「神の特権」が必要です。つまり、ユーザーがボタンをクリックしたり、UIで何かを実行したりできるとアプリが判断すると、UIで使用されているサービスアカウントによる無条件のAPI呼び出しに変換されます。これは気分が悪いですよね? 2つの権限セット(アプリの各ユーザーに設定された権限セット、次にアプリがWSに対して使用するサービスアカウントに設定された権限セット)を維持すると、権限が互いに同期しなくなる可能性があります何とかして だから私は本当にここには良い選択肢がないようです。確かに私はこれに遭遇する最初の開発者になることはできませんが、Googleの神々に尋ねることはここではあまり助けになりませんでした。何か案は?