python - flask:如何桥接前端和后端服务以呈现 api 身份验证?

标签 python api flask

flask-restplus ,我想为我的最小 flask API 呈现 API 身份验证 View ,每当我向服务器发出请求时,第一个 API 应该弹出一个保护 View ,要求用户在使用 API 调用之前提供自定义 token 值。在使用 api 函数之前,我想出了我的解决方案来制作 API 身份验证弹出 View ,但无法正确获取。谁能帮助我让我的代码顺利运行?任何的想法?

我目前尝试全面实现 :

这是我执行此任务的部分代码。

from functools import wraps
import requests, json, psycopg2, datetime
from time import time
from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from flask_restplus import Resource, Api, abort, fields, inputs, reqparse
from itsdangerous import SignatureExpired, JSONWebSignatureSerializer, BadSignature


class AuthenticationToken:
    def __init__(self, secret_key, expires_in):
        self.secret_key = secret_key
        self.expires_in = expires_in
        self.serializer = JSONWebSignatureSerializer(secret_key)

    def generate_token(self, username):
        info = {
            'username': username,
            'creation_time': time()
        }

        token = self.serializer.dumps(info)
        return token.decode()

    def validate_token(self, token):
        info = self.serializer.loads(token.encode())

        if time() - info['creation_time'] > self.expires_in:
            raise SignatureExpired("The Token has been expired; get a new token")

        return info['username']


SECRET_KEY = "f4b58245-6fd4-4bce-a8a4-27ca37370a3c"
expires_in = 600
auth = AuthenticationToken(SECRET_KEY, expires_in)

db = SQLAlchemy(app)

我几乎为 API 身份验证编写了所有代码,但无法在所需的输出中获得我期望的身份验证弹出 View 。

更新:服务器端点的输出 :

当我尝试 http://127.0.0.1:5000/token在服务器端点,我得到 Not Found错误。我怎样才能得到我想要的输出?任何的想法?

我想知道如何获得需要 token 才能访问 API 的 API 保护 View 。目前,我有一个错误,无法获得我想要的输出,所以我充满希望 SO社区帮助我解决这个问题。

所需的输出 :

我想在服务器端点上使用 API 调用之前呈现测试 API 的保护 View 。这是我想获得的模型 API 授权 View :

enter image description here

如何使用 python flask、flask restful 实现这一点?任何想法?谢谢

最佳答案

正如评论所暗示的那样,没有任何人可以分享简单的代码片段来回答这个问题。您基本上是在要求一个由五部分组成的博客,内容是如何将数据库附加到 Flask 应用程序以验证 API 凭据。我知道这似乎不是这样,但是您的问题确实从一个话题引到了下一个话题。我认为最好的办法是查看 Flask Mega 教程 Part IV DatabasesPart V User Logins .这些教程涵盖了您的代码似乎缺少的基本概念,如下所示:

  • 使用 SQLalchemy定义您的数据库模型
  • 在您的数据库中定义基本授权表
  • 使用加密使您的授权 token 无法从数据库中提取
  • 从身份验证表中刷新过期 token
  • 使用预先构建的方法来验证授权,例如 Flask-Github's github-callback exampleFlask-Login's login_required 装饰器
  • 使用flask-SQLalchemy 的create_db 可以从您的模型中构建数据库
  • 使用 Flask-SQLalchemy 的 db.session 从数据库设置/获取数据

  • 就其值(value)而言,我真的认为 The Flask Mega-Tutorial 会有所帮助。

    更新:这里是 a minimal example使用字典作为玩具数据库。关于这个例子的一些事情......
  • 如果您运行 main.py 并转到 http://127.0.0.1:5000/token?username=admin&password=somepassword您将看到正在运行的 get 示例
  • 如果你去http://127.0.0.1:5000 ,点击“hello_world”,点击“post”,然后点击“try it out”,你可以输入用户名和密码,这些将被添加到模拟数据库中。
  • 添加用户名和密码后,您可以转到http://127.0.0.1:5000/token?username=[]&password=[]除了用新的用户名和密码替换括号。如果您关闭服务器,则不会保存用户名和密码,因为它只是更新字典。

  • 希望所有这些都会有所帮助...一旦您像这样编辑了应用程序,调试与用户名和密码身份验证无关的问题应该会更容易。

    关于python - flask:如何桥接前端和后端服务以呈现 api 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61329021/

    相关文章:

    python - 将 SWIG 应用于 C++ 时,f1(const char* str) 与 f1(char* str) 是否不同?

    python - python 抓包指南

    java - 两种 post 方法出现模糊映射错误

    python - 从 HTML 输入的接收日期类型为 '<Class ' String'>

    python - pip install 自定义包含路径

    python - 由其他数组索引 numpy 数组作为索引

    Python:扩展从使用工厂方法的第三方包返回的类/对象

    api - Win 32 API 设置窗口最小尺寸以保持文本完全可见

    python - 无法在 Docker 上运行 Flask (ModuleNotFoundError)

    Python 添加额外属性使 Flask 读取 webapp2