gpt4 book ai didi

python-3.x - 具有 Flask 安全扩展的基于 token 的身份验证

转载 作者:行者123 更新时间:2023-12-02 23:11:15 25 4
gpt4 key购买 nike

我目前正在寻找一种使用基于 token 的身份验证来保护 REST API 的方法。我正在使用 Flask 在 Python 中开发 API,并发现了 Flask-security 扩展,它似乎有很多有趣的功能。

文档中提到的功能之一是 token 身份验证。

根据文档:

Token based authentication is enabled by retrieving the user auth token by performing an HTTP POST with the authentication details as JSON data against the authentication endpoint. A successful call to this endpoint will return the user’s ID and their authentication token. This token can be used in subsequent requests to protected resources.

但是,我仍然对如何使用 Flask-security 实现此功能感到有点困惑。一些在线研究使我使用了诸如 @auth_token_required 之类的东西,但我在将所有内容放在一起时遇到了一些麻烦。 Flask-security 文档本身并不是很有帮助。

例如,用户如何获得身份验证 token ?身份验证端点是什么?

如果您能引导我朝正确的方向前进,那就太好了。代码示例也很棒:-)

最佳答案

端点是/login,您将凭据作为 json 请求正文发布:

{'email':'john@smit.com', 'password':'1234'}

但是要实现此功能,您需要在 Flask 应用程序中禁用 csrf token (感谢 Mandar Vaze):

app.config['WTF_CSRF_ENABLED'] = False

然后您使用 HTTP header 中的 token 执行每个请求:

Authentication-Token:WyI1NTE1MjhmNDMxY2Q3NTEwOTQxY2ZhYTgiLCI2Yjc4NTA4MzBlYzM0Y2NhZTdjZjIxNzlmZjhiNTA5ZSJd.B_bF8g.t1oUMxHr_fQfRUAF4aLpn2zjja0

或者作为查询字符串:

http://localhost:5000/protected?auth_token=WyI1NTE1MjhmNDMxY2Q3NTEwOTQxY2ZhYTgiLCI2Yjc4NTA4MzBlYzM0Y2NhZTdjZjIxNzlmZjhiNTA5ZSJd.B_bF8g.t1oUMxHr_fQfRUAF4aLpn2zjja0

Python 3 中的客户端示例:

import requests
import json

#do the login
r = requests.post('http://localhost:5000/login',
data=json.dumps({'email':'john@smit.com', 'password':'1234'}),
headers={'content-type': 'application/json'})
response = r.json()
print(response) #check response
token = response['response']['user']['authentication_token'] #set token value

#Now you can do authorised calls
r = requests.get('http://localhost:5000/protected',
headers={'Authentication-Token': token})
print(r.text)

获取 token 的 Angular 示例片段:

$http.post('/login', {"email": $scope.formdata.login,"password":$scope.formdata.password}).
success(function(results) {
$window.sessionStorage.token = results.response.user.authentication_token;
});

访问 protected 页面的 Angular 示例片段:

 if ($window.sessionStorage.getItem('token')) {
config.headers['Authentication-Token'] = $window.sessionStorage.getItem('token');
}

关于python-3.x - 具有 Flask 安全扩展的基于 token 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com