Проблема с промежуточным программным обеспечением Keycloak: пустое имя предпочтительного_пользователя в объекте get_userPython

Программы на Python
Ответить
Anonymous
 Проблема с промежуточным программным обеспечением Keycloak: пустое имя предпочтительного_пользователя в объекте get_user

Сообщение Anonymous »

Проблема промежуточного программного обеспечения Keycloak:

Пустое имя предпочтительного_пользователя в объекте get_user

Я использую fastapi_keycloak_middleware для защиты своего приложения FastAPI с помощью Keycloak. У меня возникли проблемы с сопоставлением утверждения «preferred_username» из токена JWT с объектом FastApiUser.
Несмотря на то, что в конфигурации явно задано «preferred_username_claim="preferred_username», атрибут user.preferred_username всегда пуст внутри моей защищенной конечной точки. Утверждение определенно существует в токене Keycloak, а другие утверждения, такие как sub (сопоставленные с user_id), работают нормально.
Как правильно сопоставить предпочтительное_имя_пользователя, чтобы оно было доступно через user.preferred_username?
from fastapi import FastAPI
from fastapi_keycloak_middleware import KeycloakConfiguration, KeycloakMiddleware
from fastapi_keycloak_middleware import get_user
from fastapi import Depends

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("fastapi_keycloak_middleware").setLevel(logging.DEBUG)
logging.getLogger("fastapi").setLevel(logging.DEBUG)

# 1. Keycloak Client Configuration
keycloak_config = KeycloakConfiguration(
url="http://keycloak:8080/",
realm="demo-realm",
client_id="fastapi-client",
client_secret="vSZr8BcWWO8TiN1IMxC12fYLgmAuZvlm",
authentication_scheme="Bearer",
# These claims MUST be present in the token (Check)
claims=["sub", "name", "email", "preferred_username", "given_name", "family_name"],
reject_on_missing_claim=True,
# 🔑 IMPORTANT: Explicit Mapping (The source of the issue?)
preferred_username_claim="preferred_username", # Mapped claim
user_id_claim="sub", # This maps correctly
first_name_claim="given_name",
last_name_claim="family_name",
)

app = FastAPI()

# 2. Add Keycloak Middleware
app.add_middleware(
KeycloakMiddleware,
keycloak_configuration=keycloak_config
)

# Secure Endpoint
@app.get("/secure")
def secure(user=Depends(get_user)):
print("-----------------------------------------------------------------")
print("CONTENT OF THE 'user' OBJECT (FastApiUser):")

try:
# user.preferred_username is always empty/defaulted
user_id = getattr(user, "user_id", "Unknown ID")
username = getattr(user, "preferred_username", "Unknown User")

except Exception as e:
print(f"ERROR READING THE USER OBJECT: {e}")
username = "ERROR"

print("-----------------------------------------------------------------")

return {"message": f"Hello {username} ({user_id}), this endpoint is secured!"}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ser-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»