Wolfは、すべてのHTTPアプリケーションに適した汎用のロールベースアクセス制御(RBAC)権限システムであり、統一された認可とアクセス制御機能を提供します。
企業内では、さまざまなバックエンドサービスとそれに対応する管理インターフェースが異なるアカウントシステムと権限モジュールを持つことが一般的です。この冗長性はリソースの浪費と管理の混乱を引き起こし、特に異なるチームがこれらのシステムを開発する場合に問題が顕著になります。Wolfは、既存のシステムに変更を加えることなく、さまざまなプラットフォームやシステム全体で統一されたアカウントと認可管理を実現します。
Wolfシステムには以下の主な特徴があります:
- 言語非依存:純粋な静的Webページ、JSP、PHP、ASP、Python、Node.jsなど、あらゆるHTTPアプリケーションに適用可能
- 低結合&非侵入型:新しいアプリケーションを変更なしに統合でき、プロキシ層でリソース権限を管理
- Restfulインターフェースとバックエンドでレンダリングされた純粋なHTMLアプリケーションの両方をサポート
- 認証ソース:
- パスワード認証:内部に保存されたユーザー名とパスワードを使用
- LDAP認証:外部LDAPサーバーを通じたユーザー認証
- 認証プロトコル:
- JWT(JSON Web Token):アクセストークンの生成と検証用
- HTTP Basic認証:ユーザー名とパスワードによる基本認証をサポート
- 認可プロトコル:
- OAuth 2.0:他のアプリケーションでWolfアカウントを使用したログインと認可をサポート
- 内蔵の管理コンソール(consoleモジュール):アプリケーション、ユーザー、ロール、権限、リソースを管理
- アクセスログの記録と照会をサポートし、監査と問題追跡を容易に
- アプリケーションのRBACオブジェクト関係図の表示をサポート
- 高性能で複雑なURL照合のための高度なradixtreeルーティングをサポート
- PostgreSQLとMySQLデータベースと互換性あり
- APISIXゲートウェイとの統合をサポート
- 3つの主要モジュール:
- Wolf-Server:サービス実装とバックエンド管理機能
- Wolf-Console:管理コンソール用フロントエンドコード
- Wolf-Agent:RBACアクセスチェックプロキシ
-
アプリケーション:複数のアプリケーションをサポートし、それぞれに異なる権限、ロール、リソースを持つ。各アプリケーションのRBACオブジェクト関係図の表示が可能。
-
ユーザー:システム全体で共有。ユーザー固有の認可には以下が含まれる:
- 管理者権限:管理者に設定されたユーザーは
Console
バックエンドにログインしてアプリケーション管理が可能。 - アプリケーションリスト:ユーザーは0から複数のアプリケーションに割り当て可能。ユーザータイプによって意味が異なる:
- 管理者ユーザーの場合、管理可能なアプリケーションを示す。
- 非管理者ユーザーの場合、ログインして使用可能なアプリケーションを示す。
- ロール:ユーザーは複数のロールを割り当てられ、全てのロールから権限を累積。
- 権限:直接の権限割り当ても可能で、典型的なRBACモデルから逸脱。
- 管理者権限:管理者に設定されたユーザーは
-
ロール:一連の権限を含むことができる。
-
権限カテゴリ:管理を容易にするための権限のカテゴリ化(グループ化)方法で、通常は主要な機能モジュールに合わせている。システムの権限選択ボックスでは、権限はカテゴリごとにグループ化して表示される。
-
権限:リソースと1対多の関係を持つ。1つのリソースに1つの権限を割り当てるか、複数のリソースが同じ権限を共有できる。
-
リソース:主にHTTPリクエストを指す。リソースは
マッチタイプ
+名前
+アクション
の組み合わせで一意に識別される。主な属性は以下の通り:- マッチタイプ:
radixtree
ルーティングなし:URLマッチング方法には完全一致
、サフィックス一致
、プレフィックス一致
がある。radixtree
ルーティングあり:radixtree
モードをサポートし、名前の構文を通じて完全一致
、サフィックス一致
、プレフィックス一致
を実装。
- 名前:HTTPのURLを指す。
radixtree
ルーティングなし:完全一致
とプレフィックス一致
の場合、通常は/
で始まる。サフィックス一致
の場合、通常は.jpg
、.js
などの共通リソースサフィックス。ワイルドカードや正規表現はサポートされていない。radixtree
ルーティングあり:デフォルトは完全一致。プレフィックス一致には*
を使用:/foo*
は/foobar
にマッチするが/foo/bar
にはマッチしない。任意のマッチには**
を使用:/foo**
は/foo/bar
と/foo/car/far
にマッチする。サフィックス一致には**
を使用:**.jpg
は/images/photo.jpg
と/uploads/profile.jpg
にマッチする。
- アクション:HTTPメソッドを指す。
ALL
は全てのメソッドにマッチする。 - 権限:リソースにアクセスするために必要な権限を示す。2つの組み込み権限がある:
Allow All
は全てのユーザーがアクセス可能、Deny All
は全てのユーザーがアクセス不可。
- マッチタイプ:
-
監査ログ:システム(
Wolf-Console
とシステムで管理されるアプリケーションを含む)を通じた全てのアクセスを記録。主な記録情報:- ユーザーID、ユーザー名、ユーザーニックネーム
- アクセス日時とアクセス元のIP
- HTTPメソッドとURL
- マッチしたリソース
- アクセス応答のステータスコード
- リクエストパラメータまたはリクエストボディ(
Wolf-Console
の記録のみサポート)
- 90%以上のコードカバレッジを持つ広範なテストケース
- リソースマッチングは異なる優先順位ルールをサポート:
マッチタイプ
の優先順位(高から低):完全一致、サフィックス一致、プレフィックス一致- アクション(HTTPメソッド)の優先順位:ALLは低い優先順位、他のメソッド(GET、POST、PUTなど)は同等の優先順位だがALLより高い
- 名前(HTTP URL)の優先順位はURL長に関
- サーバー: NodeJS, KOA, Sequelize, JWT
- コンソール: VueJS, Element, Babel, NodeJS
- エージェント: OpenResty(ngx_lua)
- データベース: PostgreSQL.
- キャッシュ: Redis
アプリケーションリスト |
アプリケーション、ユーザー、ロール、権限の関係 |
ユーザー管理 |
ロール管理 |
ロールの権限の詳細/権限のグループ表示 |
権限管理 |
監査ログ |
クライアントログイン |
メインページ (注: 上部に情報バーを追加) |
権限なしページ |