如何实现GUI Less Oauth身份验证系统以访问使用Python-Flask构建的API



我已经编写了一个简单的Python Flask API,它可以执行向数据库添加数据和从数据库获取数据等操作,这个API没有UI,现在我想为这个简单的API实现OAuth身份验证系统,由于没有GUI,我不能使用google或FB OAuth Providers将用户重定向到登录页面。

简单地说,我想创建我自己的无GUI oauth身份验证系统,该系统可以保护我的API,因为任何想要访问我的API的用户都应该通过在头中传递访问令牌来通过该身份验证系统

我需要我自己的Oauth身份验证系统API如下:

from flask import Flask, redirect, url_for, session
from flask import Flask,jsonify,request,make_response
from flask_login import login_user,logout_user,current_user,login_required,LoginManager,login_manager
from flask_oauth import OAuth
import json
from flask_mysqldb import MySQL
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_oauthlib.provider import OAuth1Provider
app = Flask(__name__)
class MYWIFI(db.Model):
__tablename__ = 'MYWIFI'
id = db.Column('id', db.Integer, primary_key=True)
data = db.Column('data', db.Unicode)
def __init__(self, id, data):
self.id = id
self.data = data

@app.route('/getall')
def getall():
access_token = get_access_token()
if access_token is None:
return redirect(url_for('login'))
else:
languages = [u.__dict__ for u in db.session.query(MYWIFI).all()]
for d in languages:
del d['_sa_instance_state']
print(languages)
languagesJSON = json.dumps(languages)
return languagesJSON

@app.route('/insert', methods=['GET','POST'])
def insert():
access_token = get_access_token()
if access_token is None:
return redirect(url_for('login'))
else:
if request.method == 'POST':
insert = request.get_json()
id = insert['id']
data = insert['data']
print id
print data
new = MYWIFI(id, data)
db.session.add(new)
db.session.commit()
return "Success"
def main():
app.run()

if __name__ == '__main__':
main()

有人能帮我启动这个吗

我很感激的帮助

如果我理解正确,您想要的是构建受OAuth 2.0令牌保护的API端点。如果是这种情况,您作为API构建者不必担心令牌获取过程是如何发生的。使用您的API的客户端必须执行令牌获取并将其传递给您的终端。

关于发送标头,请尝试使用OAuth2域中已经存在的标准。RFC6750定义了客户端获得令牌后如何使用令牌。它定义了传输访问令牌的承载身份验证模式。请参阅第2.1节,了解收割台的设置方式。

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

其中,mF_9.B5f-4.1JqM是访问令牌。一旦API收到请求,您必须在授予访问权限之前验证访问令牌。为此,RFC7662定义了针对授权服务器验证访问令牌的方法。请参阅第2节Introspection端点以了解它。或者,访问令牌可以采用JWT格式,从而允许它是自包含的。

不幸的是,我没有建议解决方案的代码。他们会有相当数量的代码。但我建议您将授权逻辑与代码分开。这意味着授权验证必须是python代码中的一个单独模块。但下面我用我的python知识给出了一个建议。

@app.route('/insert', methods=['GET','POST'])
def insert():
access_token = get_access_token()
# Auth Validation for insert - This is based on access tokens
# If token is invalid/not-present, exception is thrown with HTTP 401 - unauthorized
my_auth_module.validate_access_token(access_token)
if request.method == 'POST':
insert = request.get_json()
id = insert['id']

还有最后一点,您的API不应该担心登录的重定向。让您的API客户端在401-未授权响应时处理它。

最新更新