Tornado integration#
Install#
Install with pip or conda/mamba/micromamba
pip install py-oidc-auth[tornado]
conda install -c conda-forge py-oidc-auth-tornado
Minimal application#
import json
import tornado.web
import tornado.ioloop
from py_oidc_auth import TornadoOIDCAuth, IDToken
auth = TornadoOIDCAuth(
client_id="my-client",
client_secret="secret",
discovery_url="https://idp.example.org/realms/demo/.well-known/openid-configuration",
scopes="myscope profile email",
)
# Custom handler alongside the standard OIDC routes
class AuthPortsHandler(tornado.web.RequestHandler):
"""Expose valid redirect ports for client discovery."""
def get(self) -> None:
self.write(json.dumps({"valid_ports": [8080, 8443]}))
class MeHandler(tornado.web.RequestHandler):
@auth.required()
async def get(self, token: IDToken) -> None:
self.write(json.dumps({"sub": token.sub}))
def make_app():
return tornado.web.Application(
[
*auth.get_auth_routes(prefix="/api"),
(r"/api/auth/v2/auth-ports", AuthPortsHandler),
(r"/me", MeHandler),
]
)
if __name__ == "__main__":
make_app().listen(8080)
tornado.ioloop.IOLoop.current().start()
Notes#
The Tornado adapter exposes get_auth_routes which returns a list of
(pattern, handler_class, init_kwargs) tuples. Combine them with your own
handlers using standard list concatenation.