アプリケーション層のセキュリティアーキテクチャの設計-アクセス制御

典拠コントロール、またはアクセス制御は、さまざまなシステムで広く使用されています。抽象的に言えば、それは特定のオブジェクトに対して特定の操作を実行する必要があるサブジェクトであり、この操作に対するシステムの制限は許可制御です。

ネットワークでは、ネットワークリソースのセキュリティを保護するために、IPとポートに基づくアクセス制御は、通常、ルーティング機器またはファイアウォールを介して確立されます。

オペレーティングシステムでは、ファイルへのアクセスも制御する必要があります。たとえば、Linuxシステムでは、ファイルが実行できる操作は、「読み取り」、「書き込み」、「実行」の3つのタイプに分けられます。これらの3つの操作は、ファイル所有者とファイル所有者の3つのサブジェクトに同時に対応します。ファイル所有者が属するユーザーグループ。、他のユーザー、サブジェクト、オブジェクト、および操作の間の対応は、アクセス制御リストを構成します。

Webアプリケーションでは、さまざまなアクセスオブジェクトに応じて、次のターゲット問題を解決することで共通のアクセス制御を実現できます。

  • 彼は誰?

  • 彼は許可を与えられたインターフェースにのみアクセスできます!

  • 彼は他の人のデータを見ることができません!

以前のバックエンド分離プロジェクトの例を見て、これらのターゲット問題を解決する方法を説明しましょう。

彼は誰?

フロントエンド分離プロジェクトでは、バックエンドサービスは、ログイン後に、よく知られているJWT(JSON Web Token)などのトークンをフロントエンドユーザーに発行し、フロントエンドがバックを要求するたびに-endinterfaceはこのトークンをもたらします。JWTはユーザー情報を伝達するため、現時点で行う必要があるのは、このトークンに対応するユーザーがシステムの正当なユーザーであるかどうかを確認することです。

彼は許可を与えられたインターフェースにのみアクセスできます!

彼がシステムの正当なユーザーであることを知るだけでは十分ではありません。Webアプリケーションは、現在のユーザーが自分の権限を持つインターフェイスにのみアクセスできるようにする必要があります。

たとえば、給与照会用のインターフェースがあり、ビジネスでは部門リーダーのみがそれにアクセスできます。システムが制御しない場合、Zhang Sanは給与クエリインターフェイスを知っており、トークンを使用してこのインターフェイスを呼び出すと、すべての従業員の給与を知ることができます。この問題は「不正アクセス」と呼ばれます。

この問題に対処するために広く使用されている方法の1つは、「垂直権限管理」とも呼ばれる「役割ベースのアクセス制御(RBAC:役割ベースのアクセス制御)」です。

RBACは、システム内のさまざまな役割を事前に定義します。さまざまな役割にはさまざまな権限があります。役割は、実際には権限の集合です。システムのすべてのユーザーは異なる役割に割り当てられ、ユーザーは複数の役割を持つ場合があります。

ユーザーがトークンを持ってバックエンドサービスを要求する場合、トークンを介して現在のユーザーの役割を照会し、次にその役割に基づいてユーザーが持つすべてのアクセス許可を照会する必要があります。権利フレームワークSpring Securityと  ShiroRBAC制御の非常に優れたサポート。

彼は他の人のデータを見ることができません!

ZhangSanとLiSiはどちらも部門のリーダーであり、従業員の給与の権限について問い合わせることができます。ただし、自分の部門の従業員の給与のみを表示できます。Zhang Sanは、インターフェイスの呼び出しルールを知った後、呼び出しパラメーターを変更することでLiの第4部門の従業員の給与を取得できます。もちろん、この状況は許可されていません。

RBACモデルでは、システムはユーザーAがロールXに属しているかどうかのみを確認し、ユーザーAがユーザーBのみに属するデータDataBにアクセスできるかどうかを判断しないため、不正アクセスが発生します。このような問題を「水平権限管理問題」と呼んでいます。

現在、データレベルの権限管理のための普遍的な解決策はなく、一般的に特定の問題を解決することです。

簡単な方法は、秘密鍵をインターフェース要求に追加し、暗号化して、インターフェースパラメーター+現在のシステムログイン担当者を介してバックエンドサービスに送信することです。バックエンドが要求を受信した後、暗号化されたコンテンツは復号化されます。合意されたルールに従ってユーザー情報が解析されます。ログインしたユーザーと照合し、通常のアクセスを照合し、照合が失敗した場合はアクセスを拒否します。

上記、私はあなたを助けたいと思っています!

終わり

乾物共有

これは皆へのささやかな贈り物です。公式アカウントに従って、次のコードを入力してください。Baiduネットワークディスクアドレスを取得できます。ルーチンはありません。

001:「プログラマーにとって必読の本」
002:「中小規模のインターネット企業向けのバックエンドサービスアーキテクチャと運用および保守アーキテクチャをゼロから構築する」
003:「インターネット企業向けの高同時実行ソリューション」
004:「インターネットアーキテクチャ教育ビデオ "
006:
注文システムのSpringBoot実現" 007: "SpringSecurity実際の戦闘ビデオ"
008: "Hadoop実際の戦闘教育ビデオ"
009: "Tencent 2019 Techo Developer Conference PPT"

010:WeChat交換グループ

最近のホット記事トップ

1. JWTトークンの自動更新のためのソリューション

2.SpringBoot開発のチート-非同期イベント処理

3.アーキテクトの道-サーバーハードウェアリテラシー

4.PrometheusとGrafanaに基づく監視プラットフォーム-環境設定

5. RocketMQAdvanced-トランザクションメッセージ

私はあなたが「見ている」ことを知っていました

おすすめ

転載: blog.csdn.net/jianzhang11/article/details/112504839