FastAPI Keycloak 集成教程
项目介绍
FastAPI Keycloak 是一个旨在简化 Keycloak(OpenID Connect)与 Python 尤其是 FastAPI 集成的项目。FastAPI 不是必需的,但由于其特定功能,建议使用。目前,此包仅支持密码和授权码流程。get_current_user()
方法接受任何使用 Keycloak 私钥签名的 JWT。
项目快速启动
安装
首先,通过 pip 安装 fastapi-keycloak:
pip install fastapi-keycloak
配置
创建一个 FastAPI 应用并配置 Keycloak:
from fastapi import FastAPI
from fastapi_keycloak import FastAPIKeycloak
app = FastAPI()
idp = FastAPIKeycloak(
server_url="http://localhost:8080/auth",
client_id="example_client",
client_secret="example_secret",
admin_client_secret="admin_secret",
realm="example_realm",
callback_uri="http://localhost:8000/callback"
)
idp.add_swagger_config(app)
启动应用
运行 FastAPI 应用:
uvicorn main:app --reload
应用案例和最佳实践
验证用户身份和角色
使用 FastAPI Keycloak 可以轻松验证用户的身份和角色:
from fastapi import Depends
from fastapi_keycloak import OIDCUser
@app.get("/protected")
def protected_route(user: OIDCUser = Depends(idp.get_current_user(required_roles={"realm": ["admin"]}))):
return {"message": f"Hello, {user.preferred_username}"}
管理用户和角色
创建、读取和删除用户及角色:
@app.post("/users")
def create_user(username: str):
return idp.create_user(username=username, email=f"{username}@example.com")
@app.get("/users")
def get_users():
return idp.get_all_users()
@app.delete("/users/{user_id}")
def delete_user(user_id: str):
return idp.delete_user(user_id=user_id)
典型生态项目
FastAPI
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于标准 Python 类型提示。
Keycloak
Keycloak 是一个开源的身份和访问管理解决方案,提供单点登录(SSO)、身份代理和社交登录等功能。
SQLAlchemy
SQLAlchemy 是一个功能强大的数据库工具包,为 Python 提供 SQL 工具包和对象关系映射(ORM)功能。
通过这些项目的集成,可以构建一个完整的身份验证和授权系统,适用于各种 Web 应用和服务。