Класс OpenIdConnect
Класс OpenIdConnect наследуется от класса HTTPBearer
и применяется к приложению FastAPI для извлечения токена
из заголовка Authorization по схеме Bearer.
Первым параметром передаётся URL-адрес openIdConnectUrl,
который указывает на конфигурацию OpenID Connect.
Вторым параметром передаётся scheme_name -
имя схемы безопасности, отображаемое в документации.
Третьим параметром передаётся description -
текстовое описание схемы.
Класс автоматически добавляет схему безопасности
в OpenAPI-документацию приложения.
Синтаксис
from fastapi import FastAPI
from fastapi.security import OpenIdConnect
app = FastAPI()
oidc = OpenIdConnect(
openIdConnectUrl='https://example.com/.well-known/openid-configuration',
scheme_name='OpenID Connect',
description='OpenID Connect authentication',
auto_error=True
)
Пример
Давайте создадим зависимость с классом OpenIdConnect
и защитим маршрут:
from fastapi import FastAPI, Depends
from fastapi.security import OpenIdConnect
app = FastAPI()
oidc = OpenIdConnect(
openIdConnectUrl='https://example.com/.well-known/openid-configuration'
)
@app.get('/items/')
def read_items(token: str = Depends(oidc)):
return {'token': token}
При обращении к маршруту без заголовка Authorization
FastAPI вернёт ошибку 403. Если передать заголовок
Authorization: Bearer abcde, то зависимость вернёт
значение токена.
Пример
Давайте отключим автоматическую ошибку через параметр
auto_error и обработаем отсутствие токена вручную:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OpenIdConnect
app = FastAPI()
oidc = OpenIdConnect(
openIdConnectUrl='https://example.com/.well-known/openid-configuration',
auto_error=False
)
@app.get('/items/')
def read_items(token: str = Depends(oidc)):
if token is None:
raise HTTPException(status_code=401, detail='Token is missing')
return {'token': token}
Результат выполнения кода для запроса без токена:
{"detail": "Token is missing"}
Пример
Давайте укажем имя схемы и описание через параметры
scheme_name и description:
В документации Swagger UI схема безопасности будет отображаться
под именем 'MyOpenID' с указанным описанием.
Смотрите также
-
класс
OAuth2,
который реализует аутентификацию по протоколу OAuth2 -
класс
OAuth2AuthorizationCodeBearer,
который реализует поток authorization code в OAuth2 -
класс
HTTPBearer,
который извлекает токен из заголовка Authorization -
функция
Depends,
которая внедряет зависимости в обработчики маршрутов