개발로 자기계발
article thumbnail
Published 2023. 1. 7. 18:52
FastAPI 사용자 인증 - 47 Develop/FastAPI
728x90
로그인을 통해 사용자 인증을 시도해 보자

 

1. 사용자 인증을 위한 라이브러리 import

from fastapi.security import OAuth2PasswordRequestForm
#차후 에러문을 위한 HTTPException import
from fastapi import FastAPI, HTTPException

 

2. password 일치여부 함수 생성

def verify_password(plain_password, hashed_password):
    return bcrypt_context.verify(plain_password, hashed_password)

※ verify(디코딩 패스워드, 인코딩 패스워드)

 

3. 유저 데이터를 쿼리로 가져와서 인증하는 함수 생성

def authenticate_user(username: str, password: str, db):
    user = db.query(models.Users).filter(models.Users.username == username).first()

    if not user:
        return False
    if not verify_password(password, user.hashed_password):
        return False
    return user

 

4. 인증을 위한 POST API 생성

@app.post("/token")
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(),
                                 db: Session = Depends(get_db)):
    user = authenticate_user(form_data.username, form_data.password, db)
    if not user:
        return HTTPException(status_code=404, detail="User not found")
    return "User Validated"

 

5. Swagger 확인

 

사용자 인증이 성공했을 때

 

사용자 인증이 실패했을 때

 

6. 참고 사항

OAuth 2.0(Open Authorization 2.0, OAuth2) => 인증을 위한 개방형 표준 프로토콜

Authentication
인증, 접근 자격이 있는지 검증하는 단계
Authorization
인가, 자원에 접근할 권한을 부여
인가가 완료되면 리소스 접근 권한이 담긴 Access Token이 클라이언트에게 부여
Access Token
리소스 서버에게 리소스 소유자의 보호된 자원을 획득할 때 사용되는 만료 기간이 있는 Token
Refresh Token
Access Token 만료시 이를 갱신하기 위한 용도로 사용하는 Token
일반적으로 Access Token보다 만료 기간이 김

출처 - https://blog.naver.com/mds_datasecurity/222182943542

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)