任意のプラットフォーム (PaaS) 認証のセキュリティの重要な部分は、特定のアプリケーションまたはユーザーの「権利」またはアクセス許可を、ユーザー/アプリ ベースまたは認証ごとに制限および/または定義できることです。
最新のプラットフォームまたは製品 API に見られる一般的な許可モデルは、 「スコープ」の考え方に基づいています。私の調査では、GitHub、Facebook、Instagram、Etsy (およびその他) はすべて、OAuth 実装でこのスタイルのパーミッション モデリングを使用しています。ただし、この「スコープ」モデルは、外部 (つまり、サード パーティ) アプリケーションが認証されたユーザーのデータにアクセスする方法のみに関係しているようです。
内部的には、パーミッション モデルは、「ロール」ベースのモデル (管理者、モデレーター、ユーザーなど) またはその他の多くのカスタム実装に重点を置いているようです。
私の質問は次のとおりです。「特定のアクションからユーザーを制限し、サードパーティのアプリケーションがユーザーのデータにアクセスするのを制限したい現代の PaaS に最適なパーミッション モデルはどれですか?パフォーマンスを意識した方法でどのように設計できますか?」
私の最初の調査は、スコープベースのアクセス許可モデルの内部および外部の使用法に私を導きました。残念ながら、そのようなシステムの設計は簡単ではありません。このようなアーキテクチャを作成する複数の方法を見てきました。
AR フレンドリーなリレーショナル DB の方法:
アクセス許可のリスト、ユーザーが使用できるアクセス許可、ユーザーのトークン、およびユーザー トークンのアクティブなアクセス許可の間の多対多の関係のために結合テーブルを使用して複数のテーブルを作成します。
ユーザーはトークンで認証し、そのユーザーに最初に設定されたアクセス許可まで、そのトークンで使用できる多くのアクセス許可を指定できます。
巧妙なビットマスキング方法:
データセットで単純な整数列を使用して整数値を格納する
整数値はバイナリ形式でアクセスされ、ビット単位の演算子を使用して、許可を単一ビットとして表すことにより、ユーザーまたはそのトークンの許可を設定、取得、トグル (など) します。
それぞれに長所と短所があるようです。AR に適した方法は非常に柔軟なソリューションのように見えますが、複数の結合/クエリを実行する必要があり、認証された呼び出しごとに ORM モデル インスタンスを作成する必要があるため、深刻なパフォーマンス ヒットになる可能性もあります。ビットマスキング法は非常に高速で効率的であるように見えますが、開発が直感的ではなく、エラーが発生しやすくなります。また、ビットマスキングは、中間/ハッピーメディアなしで非常に「バイナリ」なアクセス許可モデル (できるかできないか) を簡単に許可するだけであり、アクセス許可をハードウェアの制限に基づくハード 64 ビット制限。
私が行方不明/考えていないパーミッション モデリングまたはアーキテクチャの別の方法はありますか? それとも、私は正しい軌道に乗っており、パフォーマンスの考慮事項は、(リレーショナル手法に関する限り) 私が考えているほど大きな懸念事項ではありませんか?
どうもありがとう!
tl;dr:
ユーザーを特定のアクションから制限し、サードパーティ製アプリケーションがユーザーのデータにアクセスするのを制限したい最新の PaaS に最適なパーミッション モデルはどれでしょうか? また、パフォーマンスを意識した方法でそれを設計するにはどうすればよいでしょうか?