2

Flask-Securityのドキュメントでは、すべての重要なビュー エンドポイントに対する JSON/Ajax のサポートについて言及しています。そのため、JSON オブジェクトを使用してビューをヒットすることで、組み込みの Flask-Security の優れた機能をすべて取得することができます。

しかし、今は RESTful API の一部として使用しようとしていますが、API ではなく Web ページに必要な CSRF トークンが必要なため、機能していません。

{
    "meta": {
        "code": 400
    },
    "response": {
        "errors": {
            "csrf_token": [
                "CSRF token missing"
            ]
        }
    }
}

これを回避する最善の方法は何ですか?

4

2 に答える 2

6

REST API を使用する場合、推奨される方法は、JSON Web Token (JWT) などを使用したトークン ベースの認証です。この方式では、サーバー側で HTML を生成したり、Cookie を使用したりしないため、セキュリティの状況が異なります。私はセキュリティの専門家ではありませんが、読んだ限りでは、クロス サイト リクエスト フォージェリ (CSRF) の影響を受けにくいということです。これが、Flask-Security で CSRF トークンをオフにしても問題ない理由です。

PyJWT トークン ベースの認証方式を使用してみてください。トークンを取得するには、資格情報を「ログイン」エンドポイントに送信し、応答としてトークンを受け取ります。次に、HTTP ヘッダーを介して各リクエストでトークンを送信する必要があります。多くの場合、これは JS 側でグローバルに設定できます。

ここにいくつかの参照があります:

注: Flask-JWT は、itsdangerousしばらく更新されていない python ライブラリを使用しているようです。ここで議論があります: https://github.com/mattupstate/flask-jwt/issues/10 繰り返しますが、私はセキュリティの専門家ではなく、両方のライブラリがデフォルトで同じアルゴリズムでエンコード/デコードを処理しているようです。PyJWT と Python-Jose はどちらも jwt.io にリストされており、機能が拡張されています。

于 2015-09-30T14:50:08.310 に答える