Реализация OAuth 2 в aiohttp rest api python - PullRequest
0 голосов
/ 27 ноября 2018

Я создал небольшой 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)
...