microdot.auth — HTTP 인증¶
라우트를 HTTP 인증 뒤에 두어 접근을 제어하는 데코레이터입니다. 두 가지 종류가 있습니다. 브라우저가 기본적으로 프롬프트를 띄우는 Authorization: Basic <base64> 방식을 위한 BasicAuth 와, API가 사용하는 Authorization: Bearer <token> 방식을 위한 TokenAuth 입니다.
두 클래스 모두 공통 BaseAuth 기반 클래스에서 파생됩니다. 애플리케이션은 인증 객체를 생성하고, authenticate() 로 인증 콜백을 등록한 다음, 보호할 라우트를 해당 인증 인스턴스로 데코레이팅합니다.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic 인증입니다. 인증되지 않은 요청이 보호된 라우트에 도달하면 브라우저가 사용자 이름 / 비밀번호 대화 상자를 띄우고, 이후 요청에
Authorization: Basic <base64(user:pass)>를 보냅니다.- realm
브라우저가 프롬프트 옆에 표시하는 realm 문자열.
- charset
WWW-Authenticate챌린지에서 알리는 문자셋(charset).- scheme
인증 방식 이름. 기본값
'Basic'.- error_status
인증 실패 시 반환되는 HTTP 상태. 기본값 401.
- authenticate(f)¶
자격 증명 검사를 등록하는 데코레이터입니다. f 는
(request, username, password)를 받아 인증된 사용자 객체(또는 자격 증명이 잘못된 경우None)를 반환합니다. 반환된 객체는request.g.current_user에 저장됩니다.basic = BasicAuth(realm='Camera') @basic.authenticate async def check(request, username, password): user = users.get(username) if user and user.check_password(password): return user
- __call__(f)¶
라우트를
BasicAuth인스턴스로 데코레이팅하면 해당 라우트가 보호됩니다:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
__call__()과 비슷하지만, 자격 증명이 없는 요청을 거부하지 않습니다. 핸들러는 여전히 실행되며request.g.current_user에는 인증된 사용자 또는None이 설정됩니다.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Bearer 토큰 인증입니다. 클라이언트는
Authorization헤더에 토큰을 보내고, 애플리케이션은 원하는 어떤 백엔드 저장소에 대해서든 이를 검증합니다.- header
토큰을 담는 헤더 이름. 기본값
'Authorization'은 값이Bearer <token>일 것으로 예상하며, 커스텀 헤더는 토큰 값을 직접 담습니다.- scheme
Authorization헤더의 인증 방식. 기본값'Bearer'.- error_status
인증 실패 시의 HTTP 상태. 기본값 401.
- authenticate(f)¶
토큰 검사를 등록하는 데코레이터입니다. f 는
(request, token)을 받아 사용자 객체 또는None을 반환합니다:import jwt tokens = TokenAuth() @tokens.authenticate async def check(request, token): try: claims = jwt.decode(token, SECRET) except jwt.exceptions.PyJWTError: return None return claims['sub']
- errorhandler(f)¶
기본 401 응답을 재정의하는 데코레이터입니다. f 는 요청 객체를 받아 응답을 반환합니다(또는 중단).
- __call__(f: Callable) Callable¶
라우트를
TokenAuth인스턴스로 데코레이팅하면 해당 라우트가 보호됩니다. 유효한 토큰이 없는 요청은 거부됩니다(기본값 401, 또는errorhandler()가 반환한 값). 성공 시 인증된 사용자는request.g.current_user에 있습니다:@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
래핑된 핸들러를 반환합니다.
- optional(f: Callable) Callable¶
__call__()과 비슷하지만, 토큰이 없는 요청을 거부하지 않습니다. 핸들러는 여전히 실행되며request.g.current_user에는 인증된 사용자 또는None이 설정됩니다. 인증을 요구하지 않으면서도 호출자의 인증 여부에 따라 출력을 바꾸는 라우트에 유용합니다:@app.get('/api/feed') @tokens.optional async def feed(request): if request.g.current_user: return personalized_feed(request.g.current_user) return public_feed()
래핑된 핸들러를 반환합니다.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
BasicAuth와TokenAuth의 공통 기반입니다. 커스텀 인증 방식은 이를 서브클래싱할 수 있습니다.- auth_callback: Callable | None¶
authenticate를 통해 등록된 콜백입니다. 애플리케이션이 콜백을 등록하기 전까지는None입니다(함수를@auth.authenticate로 데코레이팅하는 것이 이를 설정합니다).
- error_callback: Callable¶
인증 실패 시 보낼 응답을 반환하는 비동기 호출 가능 객체입니다. 생성자가 401 응답을 반환하는 기본값으로 설정합니다.
TokenAuth에서는errorhandler를 통해, 또는 커스텀BaseAuth서브클래스에서는 직접 교체할 수 있습니다.
데코레이팅된 라우트는 request.g.current_user 에 인증 콜백이 반환한 값이 채워집니다. 라우트 내부에서 이 속성을 검사하여 호출자를 식별하십시오.