Czy trzymanie statusu autentykacji w sesji jest bezpieczene? (Starlette)

0

Próbowałem swego czasu zrobić Facebook login feature w Starlette dla mojej aplikacji. Generalnie to pokazany przez nich sposób autentykacji w Middleware trochę wydał mi się tu nie trafiony i chciałem to zrobić to w view (po Facebook login przechodzimy na nowy, wskazany wcześniej endpoint, więc trochę nielogiczne, jeśli nie niemożliwe wydało mi się zrobienie tego w middleware). Zrobiłem to w pokazany niżej sposób i zastanawiam się czy jest to bezpieczne:

# Dekorator do zabezpieczania endpointów
def requires_auth(view):
    @wraps(view)
    def wrapper(request: Request, **kwargs: Optional[Dict]):
        if not request.session.get('logged_in_user'):
            raise HTTPException(status_code=403, detail="User not authenticated, please log in.")

        return view(request, **kwargs)

    return wrapper


@app.get("/login")
async def login(request: Request):
    try:
        user = await google_sso.verify_and_process(request)
    except SSOLoginError as e:
        raise e

    else:
        request.session['logged_in_user'] = user.email
        return "Welcome"


@app.get("/test")
@requires_auth
async def test():
    return JSONResponse({"hello": "world"})

Będę wdzięczny za odpowiedź. Teoretycznie jeśli "session" nie jest modyfikowalne z poza poziomu programu, to powinno być to bezpieczne (bo czemu nie?), z drugiej, zastanawiam się czemu sami nie przedstawili tego właśnie w taki (imo) nieco prostszy sposób.

3

Nie wiem czy to odpowie na Twoje pytanie, ale np w przypadku DRF (rest framework) i jakiegoś frameworka js (ja używam vue) to takie dane często trzyma się w localstorage i jest to częsta praktyka. Więc IMO trzymanie maila w sesji jest poprawne, ale specem do security nie jestem :D

Z drugiej strony w django masz coś takiego jak Context Processors

1 użytkowników online, w tym zalogowanych: 0, gości: 1