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보다 만료 기간이 김 |
728x90
SMALL
'Develop > FastAPI' 카테고리의 다른 글
FastAPI JSON Web Token(JWT) 디코딩 함수 구현 - 49 (0) | 2023.01.08 |
---|---|
FastAPI JSON Web Token(JWT) 생성 - 48 (0) | 2023.01.08 |
FastAPI 데이터베이스에 유저 데이터 저장하기 - 46 (0) | 2023.01.07 |
FastAPI bcrypt 비밀번호 암호화 - 45 (0) | 2023.01.07 |
FastAPI Create Authentication & Post Request - 44 (0) | 2023.01.07 |