Skip to main content

Basic, Digest and Token HTTP authentication for Quart routes

Project description

quart-httpauth

Basic, Digest and Token (Bearer) HTTP authentication for Quart routes — an async-native port of Flask-HTTPAuth.

The public API mirrors Flask-HTTPAuth: class names, constructor arguments, decorator names, and callback contracts are preserved. Existing Flask-HTTPAuth code transfers by switching flask imports to quart and flask_httpauth to quart_httpauth. The one intentional change is that the request pipeline and every callback are awaited — your verify/role/error callbacks may be written as either def or async def.

Installation

pip install quart-httpauth

The distribution name is quart-httpauth; the import name is quart_httpauth.

Quickstart — Basic auth

from quart import Quart
from quart_httpauth import HTTPBasicAuth
from werkzeug.security import check_password_hash, generate_password_hash

app = Quart(__name__)
auth = HTTPBasicAuth()

users = {
    "susan": generate_password_hash("hunter2"),
}


@auth.verify_password
async def verify_password(username, password):
    if username in users and check_password_hash(users[username], password):
        return username


@app.route("/")
@auth.login_required
async def index():
    return f"Hello, {auth.current_user()}!"

Token (Bearer) auth

from quart import Quart
from quart_httpauth import HTTPTokenAuth

app = Quart(__name__)
auth = HTTPTokenAuth(scheme="Bearer")

tokens = {"secret-token-1": "john"}


@auth.verify_token
async def verify_token(token):
    return tokens.get(token)


@app.route("/")
@auth.login_required
async def index():
    return f"Hello, {auth.current_user()}!"

A custom header works too: HTTPTokenAuth(header="X-API-Key") — there the entire header value is treated as the token with no scheme prefix.

Roles and optional auth

@auth.get_user_roles
async def get_user_roles(user):
    return user.roles


@app.route("/admin")
@auth.login_required(role="admin")
async def admin():
    return "for admins only"


@app.route("/maybe")
@auth.login_required(optional=True)
async def maybe():
    user = auth.current_user()
    return f"Hello, {user or 'anonymous'}!"

Multiple schemes on one route

from quart_httpauth import HTTPBasicAuth, HTTPTokenAuth, MultiAuth

basic = HTTPBasicAuth()
token = HTTPTokenAuth()
multi = MultiAuth(basic, token)   # HTTPMultiAuth is an alias


@app.route("/")
@multi.login_required
async def index():
    return f"Hello, {multi.current_user()}!"

See examples/ for runnable apps.

Differences from Flask-HTTPAuth

  • The deprecated hash_password callback, the username() accessor, and the legacy get_password-as-Basic-credential path are not ported. Use verify_password for Basic auth. get_password is retained for HTTPDigestAuth, where it is the primary, non-deprecated mechanism.
  • The per-request user is stored on g.quart_httpauth_user.

License

MIT. Ported from Flask-HTTPAuth (also MIT) by Miguel Grinberg.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quart_httpauth-0.0.1.tar.gz (129.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quart_httpauth-0.0.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file quart_httpauth-0.0.1.tar.gz.

File metadata

  • Download URL: quart_httpauth-0.0.1.tar.gz
  • Upload date:
  • Size: 129.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for quart_httpauth-0.0.1.tar.gz
Algorithm Hash digest
SHA256 d577bc549d8de72ac2704b78086e045b31bf3efcf581b5a9090e3417c2654835
MD5 a671f010c98af1144af17ef0ff746345
BLAKE2b-256 8c9cce53392ee7e1f30e7707c2d2db65281c356e49f99cee3db27ff8d0dcbf67

See more details on using hashes here.

File details

Details for the file quart_httpauth-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: quart_httpauth-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for quart_httpauth-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b4c2e15fdf18e81a6d6b806329af350f11adecdf455b00fd8a1bc0beaca1fca5
MD5 0603adb2cde851c71a92fb38b40bfb1f
BLAKE2b-256 096d869bff4b958600d3c572847f404e2c84ad539240408b69e447e0fa34d1be

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page