22

Flask を使用して作成されflask-admin、管理インターフェイスを提供するために統合された安全な Web API を探しています。私が検索したところ、flask-admin には管理パネルが/adminあり、デフォルトでは誰でもアクセスできることがわかりました。セキュリティを提供するために何が使用されるかを想定していなかったため、認証システムは提供されず、完全にオープンです (セキュリティなし)。/adminこの API は本番環境で使用する必要があるため、URL にアクセスするすべての人にルートを開くことはできません。適切な認証が必要です。

views.py単にルートを配置してデコレータを介して認証を提供することはできません。これ/adminは、すでに作成されている既存のルートを上書きしてflask-adminエラーを引き起こすためです。

flask-adminさらに調査すると、 との 2 つのモジュールがあることがわかりますflask-securityflask-adminそれを保護する方法があることは知ってis_accessibleいますが、によって提供される多くの機能を提供しませんflask-security

エンドポイントと、などで/admin始まる他のすべてのエンドポイントを保護する方法が見つかりませんでした。/admin/admin/<something>

私は、フラスコセキュリティでこのタスクを実行することを特に検討しています。それが不可能な場合は、代替案を提案してください。

PS: 自分自身をロックできることはわかっていますngnixが、それは最後の選択肢です。それを介した認証システムがflask-securityあればいいのですが。

4

4 に答える 4

11

Flask-Security-Adminプロジェクトを確認してください。探しているものがかなり明確にカバーされていると思います。

上記のリンクから直接取得:

  • アプリのホームページに初めてアクセスすると、Flask-Security のおかげでログインするよう求められます。
  • username=someone@example.com および password=password でログインすると、「エンドユーザー」ロールが割り当てられます。
  • username=admin@example.com および password=password でログインすると、"admin" ロールが割り当てられます。
  • どちらのロールも、ホームページへのアクセスを許可されています。
  • どちらのロールも /admin ページへのアクセスを許可されています。ただし、「管理者」ロールを持っていない限り、このページにユーザーとロールを管理するためのタブは表示されません。
  • /admin/userview などの /admin ページのサブページにアクセスできるのは、admin ロールのみです。そうしないと、「禁止」応答が返されます。
  • ユーザーを編集するとき、Flask-Admin のおかげでロールの名前が自動的に入力されることに注意してください。
  • ユーザーとロールを追加および編集できます。その結果、ユーザーはログインできるようになり (active=false を設定しない限り)、"admin" ロールを持っている場合は、管理を実行できるようになります。

関連するコードは main.py にあり、flask-security を使用してフラスコ管理パネルを保護するプロセスを複製する方法を説明するために明確にコメントされています。

最も基本的で関連性のある部分は次のとおりです (152 行目から)。

# Prevent administration of Users unless the currently logged-in user has the "admin" role
def is_accessible(self):
    return current_user.has_role('admin')

これがお役に立てば幸いです。

于 2015-06-29T11:57:18.333 に答える