限制对 Flask REST API 的访问

Trz*_*lsn 4 python api rest cors flask

我用 Flask 在 python 中构建了一个 get REST API。我从我自己的网站调用这个 API,我想避免其他网站使用它。

为此,在我设置的 api 定义的标头中

'Access-Control-Allow-Origin' = '****'

**** 允许拨打电话的网站域名。

这足以避免其他人使用我的 api 吗?

Rob*_*utt 10

在 Flask 中进行 CORS 的更好方法

我可能会使用 Flask-CORS 为您的 Flask 项目添加适应性强的跨源资源共享功能...

首先 pip 安装 Flask-CORS:

pip install -U flask-cors
Run Code Online (Sandbox Code Playgroud)

然后在您的应用程序实例化内部实现:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "example.com"}})
Run Code Online (Sandbox Code Playgroud)

这将允许仅从 example.com 访问该特定路由,并为您处理所有标头,类似于 Avian 建议的方式,但以 Flasky 的方式。当然,如果您希望特定来源(或实际上任何来源)能够访问您的完整 API(或 API 的一部分),您可以使用通配符。

这足以避免其他人使用我的 api 吗?

不,这只会阻止人们使用 JS 从其他网站/源访问您的 API。它不会阻止人们使用 CuRL 或等效工具直接访问您的 API。如果您想阻止访问您的 API,您应该实施某种形式的令牌/密钥身份验证凭据,以仅对您希望获得访问权限的用户进行身份验证,并向任何没有有效凭据的用户返回“未经授权”401。