我试图允许用户使用他们的帐户通过单独的Web服务登录我的Flask应用。我可以联系此Web服务的api并接收安全令牌。如何使用此令牌对用户进行身份验证,以便他们可以访问受限视图?
我不需要将用户保存到我自己的数据库中。我只想验证他们的会话。我相信可以使用Flask-
Security和@auth_token_required装饰器完成此操作,但是文档不是很详细,我不确定如何实现。
编辑:
这是一个代码示例:
@main.route("/login", methods=["GET", "POST"])
def login():
payload = {"User": "john", "Password": "password123"}
url = "http://webserviceexample/api/login"
headers = {'content-type': 'application/json'})
#login to web service
r = requests.post(url, headers=headers, json=payload)
response = r.json()
if (r.status_code is 200):
token = response['user']['authentication_token']
# allow user into protected view
return render_template("login.html", form=form)
@main.route('/protected')
@auth_token_required
def protected():
return render_template('protected.html')
嘿,Amedrikaner!
看来您的用例很简单,我们可以自己实现。在下面的代码中,我将在用户会话中存储您的令牌,并签入新包装。让我们开始制作自己的包装器,我通常只是将它们放在wrappers.py文件中,但是可以将其放置在所需的位置。
def require_api_token(func):
@wraps(func)
def check_token(*args, **kwargs):
# Check to see if it's in their session
if 'api_session_token' not in session:
# If it isn't return our access denied message (you can also return a redirect or render_template)
return Response("Access denied")
# Otherwise just send them where they wanted to go
return func(*args, **kwargs)
return check_token
凉!
现在我们已经实现了包装器,我们只需将其令牌保存到会话中即可。超级简单。让我们修改您的功能…
@main.route("/login", methods=["GET", "POST"])
def login():
payload = {"User": "john", "Password": "password123"}
url = "http://webserviceexample/api/login"
headers = {'content-type': 'application/json'})
#login to web service
r = requests.post(url, headers=headers, json=payload)
response = r.json()
if (r.status_code is 200):
token = response['user']['authentication_token']
# Move the import to the top of your file!
from flask import session
# Put it in the session
session['api_session_token'] = token
# allow user into protected view
return render_template("login.html", form=form)
现在,您可以使用@require_api_token包装器检查受保护的视图,如下所示…
@main.route('/super_secret')
@require_api_token
def super_secret():
return "Sssshhh, this is a secret"
编辑 哇!我忘了提到您需要在应用程序配置中设置SECRET_KEY。
只需使用SECRET_KEY =“ SOME_RANDOM_STRING”的config.py文件即可。然后加载…
main.config.from_object(config)
最后,我实现了UserDetailsService接口
我有几个azure函数,我想设置一个基于令牌的身份验证(使用承载令牌)。我想确保没有在HTTP头中传递承载令牌的用户不能访问azure函数。我正在使用可视代码/蔚蓝云。如有任何帮助或指导,将不胜感激。我有一种方法可以使用客户端id、secret和租户id来获得承载令牌,但是如何使其成为azure函数的必填字段呢?
400-错误请求-{“error”:“invalid_grant”,“error_description”:“Bad Request”} 我的请求URL如下所示: 当用户与代码一起被重定向回来时,我的令牌请求函数被调用: 返回Access&refresh令牌,并将其存储在数据库中,然后在我的refresh函数中使用,此处的令牌URI为https://www.googleapis.com/oauth
我正在制作SPA,并决定使用JWT进行身份验证/授权,我读过一些关于令牌与Cookies的博客。我理解cookie授权是如何工作的,也理解基本令牌授权是如何工作的。问题是,我看不出刷新令牌如何适合它,在我看来,它降低了安全性。让我解释一下,就像我看到的那样: 通过用户名验证用户时 > 服务器还需要不断地查找存储,以查看什么用户,cookie点。 通过用户名验证用户时 这很容易受到XSS(跨站点脚本
问题内容: 我正在尝试使用Flask和Flask-Login扩展在Flask应用中实现用户身份验证。目的是从数据库中提取用户帐户信息,然后登录用户,但我陷入了困境。但是,我将其范围缩小到Flask-Login行为的特定部分。 根据Flask-Login文档,我需要创建一个user_loader“回调”函数。此功能的实际目的和实现让我困惑了几天: 你将需要提供一个user_loader回调。此回调用
我的客户机有一个GraphQL API运行在Google cloud Run上。 我已经使用了一个服务帐户进行身份验证,并访问了gcloud命令行工具。 当使用gcloud命令行时,如下所示: 我可以生成一个令牌,用于向API发出post请求。这工作,我可以成功地从邮递员,失眠和从我的nodejs应用程序的api发布请求。 这将输出一个“承载”令牌: 但是,这个承载令牌并不像上面的那样工作,并且在