이전 내용
[FastAPI] SQLAlchemy와 CRUD (Depends, db.query)
이전 내용 [파이썬] FastAPI - ORM 연동하기(SQLAlchemy)이전 내용 [파이썬] FastAPI - 웹소켓이전 내용 [파이썬] FastAPI - 스트리밍 응답이전 내용 [파이썬] FastAPI - 쿼리 매개변수, 경로 매개변수, 백그라운
puppy-foot-it.tistory.com
인증과 세션
인증과 세션의 개념에 대해서는 이전에 작성했던 플라스크 내용을 참고
[파이썬] 플라스크(Flask) - 인증과 세션(1)
시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.인증과 세션 인증(authentication)사용자가 누구인지 확
puppy-foot-it.tistory.com
간단하게 말하면,
- 인증: 어떤 사용자가 누구인지 식별하는 과정
- 세션: 사용자가 웹사이트에 접속한 이후부터 로그아웃 또는 브라우저를 종료할 때까지 유지되는 정보의 집합
기본적인 인증 매커니즘은 클라이언트와 서버 간의 간단한 상호작용 방식으로, 사용자의 신원 정보(사용자 이름과 비밀번호)를 HTTP 요청 헤더를 통해 전송하여 인증을 수행 한다.
[기본 인증의 동작 방식]
- 사용자가 웹 브라우저나 모바일 앱과 같은 클라이언트 애플리케이션을 통해 보호된 자원에 접근하려고 할 때, 서버는 해당 요청을 수신하고 인증되지 않았음을 확인하면 401 Unauthorized 상태 코드와 함께 WWW-Authenticate 헤더를 클라이언트에 전송하여 인증 정보를 요구한다.
- 사용자 이름과 비밀번호를 입력한 클라이언트는 이 정보를 Base64로 인코딩하여 Authorization 헤더에 포함시켜 서버에 다시 요청한다. 서버는 이 헤더를 확인하여 사용자 이름과 비밀번호를 디코딩한 후, 데이터베이스 등으로 검증하고, 인증이 성공하면 요청한 자원을 반환하고, 실패 시 다시 401 Unauthorized 응답을 보낸다.
HTTP 헤더
HTTP 헤더는 클라이언트와 서버 간의 요청 및 응답에 대한 추가 정보를 포함하는 메타데이터로, 클라이언트(웹 브라우저나 애플리케이션)와 서버 간에 데이터를 주고받을 때 함께 보내지는 '추가 정보' 라고 할 수 있다. HTTP 헤더는 요청 및 응답의 형식을 정의하고, 클라이언트와 서버 간의 상호작용을 최적화하는 데 중요한 역할을 한다.
1. 요청 헤더 (Request Headers)
- User-Agent: 클라이언트 애플리케이션의 정보(브라우저, 운영 체제 등).
- Accept: 클라이언트가 처리할 수 있는 콘텐츠 타입 지정.
- Authorization: 인증 정보를 포함하여 요청에 대한 사용자의 권한 전달.
- Content-Type: 요청 본문에 포함된 데이터의 타입.
2. 응답 헤더 (Response Headers)
- Content-Type: 서버가 응답으로 보내는 데이터의 타입 지정.
- Content-Length: 응답 본문의 크기를 바이트 단위로 나타냄.
- Set-Cookie: 클라이언트에 쿠키를 설정하는 데 사용.
- Cache-Control: 캐싱 관련 지침 제공.
3. 일반 헤더 (General Headers)
- Date: 요청이나 응답이 발생한 날짜와 시간.
- Transfer-Encoding: 본문 전송 방식(예: chunked).
FastAPI 에서의 HTTP 헤더
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPBasic, HTTPBasicCredentials
security = HTTPBasic()
app = FastAPI()
def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
if credentials.username != "admin" or credentials.password != "secret":
raise HTTPException(status_code=401, detail="Unauthorized")
return credentials.username
@app.get("/users/me", tags=["users"])
def read_current_user(username: str = Depends(get_current_username)):
return {"username": username}
1. 모듈 임포트
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPBasic, HTTPBasicCredentials
- FastAPI: 웹 애플리케이션을 만드는 데 사용되는 프레임워크.
- Depends: 의존성 주입을 위한 도구로, 함수의 인자로 다른 함수를 주입할 수 있게 해준다.
- HTTPException: HTTP 오류 응답을 생성하는 데 사용.
- HTTPBasic: 기본 인증을 구현하기 위한 클래스.
- HTTPBasicCredentials: 기본 인증의 사용자 이름과 비밀번호를 포함하는 클래스.
2. FastAPI 인스턴스 생성
app = FastAPI()
- FastAPI 애플리케이션 인스턴스를 생성.
3. 인증 함수 정의
def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
if credentials.username != "admin" or credentials.password != "secret":
raise HTTPException(status_code=401, detail="Unauthorized")
return credentials.username
- get_current_username 함수는 클라이언트로부터 받은 인증 정보를 검증한다. 사용자 이름이나 비밀번호가 "admin"과 "secret"이 아닐 경우, 401 Unauthorized 오류를 발생시킨다. 인증에 성공하면 사용자 이름을 반환한다.
4. API 엔드포인트 정의
@app.get("/users/me", tags=["users"])
def read_current_user(username: str = Depends(get_current_username)):
return {"username": username}
- GET /users/me 엔드포인트를 정의하며, 해당 엔드포인트에 접근하기 위해서는 get_current_username 함수를 통해 인증을 받아야 한다. 인증에 성공한 경우, 클라이언트는 사용자 이름을 포함한 JSON 응답을 받는다.
[POST MAN 테스트]
POST MAN에서 GET 메소드로 설정하고, Authorization 탭에서 알맞은 아이디와 비밀번호를 입력하면 JSON 방식으로 반환한다.
다음 내용
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[FastAPI] SQLAlchemy와 CRUD (Depends, db.query) (0) | 2025.05.01 |
---|---|
[파이썬] FastAPI - ORM 연동하기(SQLAlchemy) (0) | 2025.04.28 |
[파이썬] FastAPI - 웹소켓 (0) | 2025.04.27 |
[파이썬] FastAPI - 스트리밍 응답 (0) | 2025.04.27 |
[파이썬] FastAPI - 쿼리 매개변수, 경로 매개변수, 백그라운드 태스크 (0) | 2025.04.27 |