Я создал небольшой API, используя библиотеку Python aiohttp.Теперь я хочу добавить аутентификацию OAuth 2 к этому API (каждый запрос должен быть авторизован перед тем, как дать ответ).Я никогда раньше не выполнял аутентификацию API, был бы признателен за хороший пример реализации на стороне API (на стороне сервера).Вот пример кода API.
import MySQLdb
from aiohttp import web
import os
import json
import sys
import requests
def mysqlcon(query,dbname):
db = MySQLdb.connect("localhost", "wap", "12345678", dbname)
cursor = db.cursor()
cursor.execute(query)
data = cursor.fetchall()
db.close()
return data
def username():
try:
final_dict = {}
final_output = []
dt = mysqlcon("select distinct username from rpa_triggers","rpa")
for i in dt:
final_output.append({"user": i[0]})
final_dict["Result"]=final_output
return final_dict
except Exception as e:
response_obj = {'status': 'failed', 'reason': str(e)}
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
print(exc_type, fname, exc_tb.tb_lineno)
return web.Response(text=json.dumps(response_obj), status=500)
def data():
try:
final_data = requests.get("http://localhost:5000/users")
final_data = final_data.json()
return final_data
except Exception as e:
response_obj = {'status': 'failed', 'reason': str(e)}
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
print(exc_type, fname, exc_tb.tb_lineno)
return web.Response(text=json.dumps(response_obj), status=500)
async def user_func(request):
a = await request.loop.run_in_executor(None, username)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})
async def data_func(request):
a = await request.loop.run_in_executor(None, data)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})
app = web.Application(debug=True)
app.router.add_get('/users',user_func)
app.router.add_get('/data',data_func)
web.run_app(app,port=5000)