인증
Starlette는 인증 및 권한을 처리하기 위한 간단하지만 강력한 인터페이스를 제공합니다. 적절한 인증 백엔드로 AuthenticationMiddleware 를 설치하면 엔드포인트에서 request.user 및 request.auth 인터페이스를 사용할 수 있습니다.
Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
Starlette. 가져오기에서 (
인증, AuthenticationBackend, 인증 오류, 단순 사용자
)
Starlette.middleware에서 미들웨어 가져오기
Starlette.middle에서.인증 가져오기AuthenticationMiddleware
Starlette.에서 일반 텍스트 응답을 가져옵니다.
별자리에서. 라우팅 가져오기 경로
베이스64 가져오기
비나시 수입
클래스 기본 저자 백엔드(AuthenticationBackend):
Async def 인증(자체, conn):
"인증"이 연결에 없는 경우 헤더:
반품
Auth = .headers ["인증"]
시도:
구성표, 자격 증명 = .분할()
만약 e.low ()! = '기본':
반품
디코딩 = base64.b64 디코딩(자격 증명).decode("ascii")
제외(Value오류, UnicodeDecode오류, binascii. 오류) exc:
인증 오류 올리기('잘못된 기본 인증 자격 증명')
사용자 이름, _, 암호 = decoded.(":")
# TODO: 여기에서 사용자 이름과 암호를 확인하려고 합니다.
인증서 반환(["인증"]), 단순 사용자(사용자 이름)
Async def 홈페이지(요청):
요청이 있는 경우.user.user는 인증되었습니다.
일반 텍스트 응답을 반환합니다('안녕하세요', + 요청.user. _name)
일반 텍스트 응답 반환('안녕하세요')
경로 = [
경로("/", 엔드포인트 = 홈페이지)
]
미들웨어 = [
미들웨어(AuthenticationMiddleware, backend=BasicAuthBackend())
]
App = Starlette(경로 = 경로, middleware=middleware)
사용자
AuthenticationMiddleware 설치가 완료되면 request.user 인터페이스를 엔드포인트 또는 기타 미들웨어와 함께 사용할 수 있습니다.
이 인터페이스는 사용자 모델에 포함된 다른 정보뿐만 아니라 두 가지 속성을 제공하는 BaseUser 의 하위 클래스를 상속해야 합니다.
.is_authenticated.display_name
Starlette는 UnauthenticatedUser() 와 SimpleUser(username) 의 두 가지 내장 사용자 구현을 제공합니다.
인증 자격 증명
중요한 것은 인증 자격 증명은 사용자와 별도의 개념으로 취급되어야 한다는 것입니다. 인증 체계는 사용자 ID와 독립적으로 특정 권한을 제한하거나 부여할 수 있어야 합니다.
AuthCredentials 클래스는 request.auth 에서 노출되는 기본 인터페이스를 제공합니다.
.scopes
허가
권한은 엔드포인트 데코레이터로 구현되어 수신 요청에 필요한 인증 범위를 포함하도록 강제합니다.
Starlette. 인증 가져오기가 필요합니다.
@ 필요 ('인증')
비동기 def 대시보드(요청):
...
하나 이상의 필수 범위를 포함할 수 있습니다.
Starlette. 인증 가져오기가 필요합니다.
@ 필요 (['인증', 'admin'])
비동기 def 대시보드(요청):
...
기본적으로 권한이 부여되지 않은 경우 403 응답이 반환됩니다. 인증되지 않은 사용자로부터 URL 레이아웃에 대한 정보를 숨기는 것과 같이 사용자 지정하는 경우도 있습니다.
Starlette. 인증 가져오기가 필요합니다.
@ 요구 사항(['인증', 'admin'], stast_code=404)
비동기 def 대시보드(요청):
...
!!! WebSockets는 status_code 매개 변수를 지원하지 않습니다. 이러한 경우 항상 403(금지된) 상태 코드가 사용됩니다.
또는 인증되지 않은 사용자를 다른 페이지로 리디렉션할 수 있습니다.
Starlette. 인증 가져오기가 필요합니다.
Async def 홈페이지(요청):
...
@ 요구 사항('인증', 리디렉션 = '홈페이지')
비동기 def 대시보드(요청):
...
사용자를 리디렉션할 때 리디렉션할 페이지에는 next 쿼리 매개 변수에 원래 요청한 URL이 포함됩니다.
Starlette. 인증 가져오기가 필요합니다.
Starlette.에서 가져온 리디렉션 응답
@ 요구 사항('인증', 리디렉션 = '로그인')
비동기 def 관리자(요청):
...
비동기 def 로그인(요청):
요청하면.방법 == "POST":
# 이제 사용자가 인증되었으므로
# 원래 요청 대상으로 보낼 수 있습니다.
요청이 있는 경우.user.user는 인증되었습니다.
다음 _ url = 요청.쿼리 _ params get ("다음")
다음 경우_url:
리디렉션 응답 반환(다음 _url)
리디렉션 응답 반환("/")
클래스 기반 엔드포인트의 경우 데코레이터를 클래스 메서드로 묶어야 합니다.
Starlette. 인증 가져오기가 필요합니다.
Starlette.endpoint에서 HTTPEndpoint 가져오기
클래스 대시보드(HTTPEndpoint):
@ 요구 사항("인증")
Aync def get (자체, 요청):
...
사용자 지정 인증 오류 응답
인증 백엔드가 AuthenticationError 를 던질 때 전송되는 오류 응답을 사용자 지정할 수 있습니다.
Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
Starlette.middleware에서 미들웨어 가져오기
Starlette.middle에서.인증 가져오기AuthenticationMiddleware
스타렛에서. 요청 가져오기 요청
Starlette.에서 JSONResponse 가져오기
Def on_auth_ 오류(요청: 요청, exc: 예외):
JSON 응답 반환({"error": str(exc)}, stast_code=401)
앱 = Starlette (
미들웨어 = [
미들웨어(AuthenticationMiddleware, backend=BasicAuthBackend(), on_error = on_auth_error),
],
)