{"id":44916,"library":"fastapi-keycloak-middleware","title":"FastAPI Keycloak Middleware","description":"Middleware for FastAPI that authenticates users against a Keycloak server. Supports OIDC, role-based access, and token validation. Current version 1.6.0, requires Python >=3.11, <4. Release cadence is irregular.","status":"active","version":"1.6.0","language":"python","source_language":"en","source_url":"https://github.com/siriusnottin/fastapi-keycloak-middleware","tags":["fastapi","keycloak","authentication","middleware"],"install":[{"cmd":"pip install fastapi-keycloak-middleware","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"Old import path before v1.5.0.","wrong":"from fastapi_keycloak_middleware.middleware import KeycloakMiddleware","symbol":"KeycloakMiddleware","correct":"from fastapi_keycloak_middleware import KeycloakMiddleware"},{"note":"Config class moved to top-level in v1.5.0.","wrong":"from fastapi_keycloak_middleware.config import KeycloakConfiguration","symbol":"KeycloakConfiguration","correct":"from fastapi_keycloak_middleware import KeycloakConfiguration"}],"quickstart":{"code":"import os\nfrom fastapi import FastAPI\nfrom fastapi_keycloak_middleware import KeycloakConfiguration, KeycloakMiddleware\n\napp = FastAPI()\n\nconfig = KeycloakConfiguration(\n    url=os.environ.get('KEYCLOAK_URL', 'http://localhost:8080'),\n    realm=os.environ.get('KEYCLOAK_REALM', 'master'),\n    client_id=os.environ.get('KEYCLOAK_CLIENT_ID', 'my-client'),\n    client_secret=os.environ.get('KEYCLOAK_CLIENT_SECRET', ''),\n)\n\nmiddleware = KeycloakMiddleware(app=app, configuration=config)\napp.add_middleware(middleware)\n\n@app.get('/')\nasync def root():\n    return {'message': 'Hello World'}\n","lang":"python","description":"Minimal FastAPI app with Keycloak authentication."},"warnings":[{"fix":"Update imports to 'from fastapi_keycloak_middleware import KeycloakMiddleware, KeycloakConfiguration'.","message":"In v1.5.0, the import path changed: KeycloakMiddleware and KeycloakConfiguration are now at the package top level, not in submodules.","severity":"breaking","affected_versions":"<1.5.0"},{"fix":"Replace 'verify_token=False' with 'skip_verification=True'.","message":"The 'verify_token' parameter in KeycloakConfiguration was deprecated in v1.4.0 and removed in v1.5.0. Use 'skip_verification' instead.","severity":"deprecated","affected_versions":">=1.4.0,<1.5.0"},{"fix":"Add KeycloakMiddleware using app.add_middleware() before any other middleware.","message":"Middleware order matters: KeycloakMiddleware must be added before other middleware (like CORS) to ensure token validation occurs first.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"search_vec":"'1.6.0':25 '3.11':28 '4':29 'access':19 'authent':8,36 'base':18 'cadenc':31 'current':23 'fastapi':1,6,34 'irregular':33 'keycloak':2,12,35 'middlewar':3,4,37 'oidc':15 'python':27 'releas':30 'requir':26 'role':17 'role-bas':16 'server':13 'support':14 'token':21 'user':9 'valid':22 'version':24","created_at":"2026-06-07T12:52:27.824966+00:00","updated_at":"2026-06-07T12:52:27.824966+00:00","problems":[{"fix":"Update import to: from fastapi_keycloak_middleware import KeycloakMiddleware","cause":"Using an outdated import path (e.g., from submodules) that existed before v1.5.0.","error":"ImportError: cannot import name 'KeycloakMiddleware' from 'fastapi_keycloak_middleware'"},{"fix":"Ensure KeycloakConfiguration includes 'url' parameter (e.g., KeycloakConfiguration(url='...', realm='...', client_id='...')).","cause":"The KeycloakConfiguration object was not provided with a 'url' field.","error":"fastapi_keycloak_middleware.exceptions.ConfigurationError: Missing required configuration: 'url'"},{"fix":"Use app.add_middleware(KeycloakMiddleware, configuration=config) instead of app.add_middleware(middleware_instance).","cause":"Misusing the middleware object: it should be passed to app.add_middleware(), not used as a decorator or added as a list.","error":"TypeError: object of type 'KeycloakMiddleware' has no len()"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":null,"github":null,"docs":null,"changelog":null,"pypi":null,"npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["security"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-29","last_verified":"2026-06-29","next_check":"2026-07-29","install_tag":null}}