use*_*431 13 restful-authentication flask python-3.x flask-security
我目前正在寻找一种使用基于令牌的身份验证来保护REST API的方法.我正在使用Flask在Python中开发API,并发现了flask-security扩展,它似乎有很多有趣的功能.
令牌中提到的功能之一是令牌认证.
根据文件:
通过执行HTTP POST检索用户身份验证令牌来启用基于令牌的身份验证,其中身份验证详细信息为针对身份验证端点的JSON数据.成功调用此端点将返回用户的ID及其身份验证令牌.此令牌可用于对受保护资源的后续请求.
但是,我仍然对如何使用flask-security实现此功能感到困惑.一些在线研究让我使用了诸如@auth_token_required之类的东西,但我把所有东西放在一起都有些麻烦.烧瓶安全文档本身并不是很有帮助.
例如,用户如何获得身份验证令牌?什么是身份验证端点?
如果你能引导我朝着正确的方向前进,那就太棒了.代码示例也很棒:-)
Seb*_*ian 13
端点是/ login,您将凭据发布为json请求正文:
{'email':'john@smit.com', 'password':'1234'}
Run Code Online (Sandbox Code Playgroud)
但是要实现此功能,您需要在烧瓶应用程序中禁用csrf令牌(感谢Mandar Vaze):
app.config['WTF_CSRF_ENABLED'] = False
Run Code Online (Sandbox Code Playgroud)
然后,您使用HTTP标头中的令牌执行每个请求:
Authentication-Token:WyI1NTE1MjhmNDMxY2Q3NTEwOTQxY2ZhYTgiLCI2Yjc4NTA4MzBlYzM0Y2NhZTdjZjIxNzlmZjhiNTA5ZSJd.B_bF8g.t1oUMxHr_fQfRUAF4aLpn2zjja0
Run Code Online (Sandbox Code Playgroud)
或者作为查询字符串:
http://localhost:5000/protected?auth_token=WyI1NTE1MjhmNDMxY2Q3NTEwOTQxY2ZhYTgiLCI2Yjc4NTA4MzBlYzM0Y2NhZTdjZjIxNzlmZjhiNTA5ZSJd.B_bF8g.t1oUMxHr_fQfRUAF4aLpn2zjja0
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
用于获取令牌的Angular示例代码段:
$http.post('/login', {"email": $scope.formdata.login,"password":$scope.formdata.password}).
success(function(results) {
$window.sessionStorage.token = results.response.user.authentication_token;
});
Run Code Online (Sandbox Code Playgroud)
用于访问受保护页面的Angular示例代码段:
if ($window.sessionStorage.getItem('token')) {
config.headers['Authentication-Token'] = $window.sessionStorage.getItem('token');
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*Lin 10
我发现Flask-Security的基于令牌的不适合我的项目.我推荐使用JWT令牌.
Flask-Security基于令牌的身份验证存在的问题.
查看JWT(pyjwt或flask-jwt)令牌,它解决了上述所有问题等等.
身份验证端点是/login
这里具体看一下flask-security的代码views.py:_render_json()
login() 调用 _render_json ,后者又调用 get_auth_token() - 并返回身份验证令牌。
(对我来说)问题是让它发挥作用。对我来说 request.json 似乎是空的(因此这不起作用)
{"email": "test@example.com", "password": "test123"}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助您向前迈进一点。
| 归档时间: |
|
| 查看次数: |
7473 次 |
| 最近记录: |