我已经通过Flask视图构建了一个API,用户使用一些端点在/api/v1/....
处访问。我想认证提出请求的用户。什么是强制使用我的API进行身份验证的方法?有没有办法避免构建用户模型,而是使用Google或基于Github的身份验证?基于Flask的API的身份验证?
-2
A
回答
1
我使用flask-login拦截具有会话的Web请求和具有标题的Web请求。来自Web的请求使用Flask的会话,来自移动应用程序的请求会发送一个标题。
这些方法返回给定请求的用户。 API token由其危险签名(防篡改),从而为Flask的cookies提供支持。
from itsdangerous import URLSafeSerializer, BadData
serializer = URLSafeSerializer(CONFIG['SECRET_KEY'])
def load_user_from_request(request):
token = request.headers.get('API-TOKEN')
if token:
try:
user_id = serializer.loads(token)["id"]
user = User.query.filter(User.active == True, User.id == int(user_id)).first()
if user:
return user
except BadData as e:
pass
return None
def load_user(id):
user = User.query.filter(User.active == True, User.id == int(id)).first()
if not user:
return None
return user
login_manager.user_loader(load_user)
login_manager.request_loader(load_user_from_request)
该端点接受认证请求,检查用户名和密码并发出令牌。其危险的串行器使您的对象的防篡改版本。客户端提交相同的标题。只要应用程序的密钥安全,您的服务器就可以确认已签名的对象是由您的服务器发出的。
@blueprint.route('/api_auth', methods=["post"])
def api_auth():
...check username and password
return response({
'API-TOKEN': serializer.dumps({'id': user.id})
})
相关问题
- 1. 基于不依赖表单身份验证的基于Cookie的身份验证
- 2. 基于角度令牌的基于身份验证的验证
- 3. 基于证书的身份验证
- 4. Solr6.3.0 SolrJ API的基本身份验证
- 5. 与基本身份验证的HTTP基本身份验证
- 6. 使用基于SAML的基本身份验证进行身份验证?
- 7. 基于Oracle表的身份验证
- 8. Jconsole基于密码的身份验证
- 9. 基于会话的身份验证
- 10. 基于Spring Boot Token的身份验证
- 11. 基于表单的身份验证
- 12. Springboot基于角色的身份验证
- 13. 基于角色的身份验证
- 14. 基于Java的用户身份验证
- 15. Android - 基于表单的身份验证
- 16. 基于OAuth的身份验证方案
- 17. 基于oauth的身份验证查询
- 18. PHP:基于JWT的身份验证
- 19. 基于图像的身份验证
- 20. 实现基于REST的身份验证
- 21. 基于XMLHttpRequest的Windows身份验证
- 22. 创建基于http的身份验证
- 23. 基于表单的身份验证
- 24. 基于Jsch证书的身份验证和登录身份验证取消
- 25. 基于角色的身份验证与asp.net中的窗口身份验证
- 26. 对基于JSON的API的监察员身份验证
- 27. 基于令牌的身份验证的REST API
- 28. Sinatra的API身份验证
- 29. API的rails身份验证
- 30. 身份验证的Web API
我认为Flask-OAuth或Flask-OAtuthlib会有帮助。 – stamaimer