# examples/server_simple.py from aiohttp import web from aiohttp.web import middleware import jwt import rsa with open('key', mode='rb') as f: private_key = f.read() with open('key.pub', mode='rb') as f: public_key = f.read() async def handle(request): name = request.match_info.get('name', "Anonymous") text = "Hello, " + name return web.Response(text=text) @middleware async def auth(request, handler): try: scheme, token = request.headers['Authorization'].strip().split(' ') except KeyError: return web.HTTPUnauthorized(reason='Missing authorization header',) except ValueError: return web.HTTPForbidden(reason='Invalid authorization header',) if scheme.lower() != 'bearer': return web.HTTPForbidden(reason='Invalid token scheme',) print(token) try: payload = jwt.decode(token, public_key, algorithms='RS256') print(payload) resp = await handler(request) except jwt.InvalidTokenError: print("Invalid token") resp = web.Response(text="Invalid token", status=401) return resp def main(): token = jwt.encode({"servers": ["a", "b", "c"]}, private_key, algorithm="RS256") print("==========Token==========") print(len(token), token) print("=========================") app = web.Application(middlewares=[auth]) app.add_routes([web.get('/', handle)]) web.run_app(app) if __name__ == '__main__': main()