Skip to content

Фиктивный провайдер аутентификации

Описание

Этот провайдер аутентификации позволяет войти в систему с любым именем пользователя и паролем, а затем выдает токен доступа.

После успешной аутентификации имя пользователя сохраняется в базе данных бэкенда.

Схема взаимодействия

sequenceDiagram
participant "Клиент"
participant "Бэкенд"

activate "Клиент"
alt Успешный кейс
"Клиент" ->> "Бэкенд"  : Логин + пароль
"Бэкенд" ->> "Бэкенд" : Пароль полностью игнорируется
"Бэкенд" ->> "Бэкенд" : Проверка пользователя во внутреннней базе данных Бэкенда
"Бэкенд" ->> "Бэкенд" : Создать пользователя, если не существует
"Бэкенд" ->> "Клиент"  : Сгенерировать и вернуть токен доступа

else Пользователь заблокирован
"Клиент" ->> "Бэкенд"  : Логин + пароль
"Бэкенд" ->> "Бэкенд" : Пароль полностью игнорируется
"Бэкенд" ->> "Бэкенд" : Проверка пользователя во внутреннней базе данных Бэкенда
"Бэкенд" --x "Клиент"  : 401 Неавторизован

else Пользователь удален
"Клиент" ->> "Бэкенд"  : Логин + пароль
"Бэкенд" ->> "Бэкенд" : Пароль полностью игнорируется
"Бэкенд" ->> "Бэкенд" : Проверка пользователя во внутреннней базе данных Бэкенда
"Бэкенд" --x "Клиент"  : 404 Не найден
end

alt Успешный кейс
"Клиент" ->> "Бэкенд"  : токен доступа
"Бэкенд" ->> "Бэкенд" : Проверка токена
"Бэкенд" ->> "Бэкенд" : Проверка пользователя во внутреннней базе данных Бэкенда
"Бэкенд" ->> "Бэкенд" : Получение данных
"Бэкенд" ->> "Клиент"  : Возвращение данных

else Срок действия токена истек 
"Клиент" ->> "Бэкенд"  : токен доступа
"Бэкенд" ->> "Бэкенд" : Проверка токена
"Бэкенд" --x "Клиент"  : 401 Неавторизован

else Пользователь не найден
"Клиент" ->> "Бэкенд"  : токен доступа
"Бэкенд" ->> "Бэкенд" : Проверка токена
"Бэкенд" ->> "Бэкенд" : Проверка пользователя во внутреннней базе данных Бэкенда
"Бэкенд" --x "Клиент"  : 404 Не найден
end

deactivate "Клиент"

Конфигурация

Bases: BaseModel

Settings for DummyAuthProvider.

Examples

.. code-block:: bash

DATA_RENTGEN__AUTH__PROVIDER=data_rentgen.server.providers.auth.dummy_provider.DummyAuthProvider
DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=secret
Source code in data_rentgen/server/settings/auth/dummy.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class DummyAuthProviderSettings(BaseModel):
    """Settings for DummyAuthProvider.

    Examples
    --------

    .. code-block:: bash

        DATA_RENTGEN__AUTH__PROVIDER=data_rentgen.server.providers.auth.dummy_provider.DummyAuthProvider
        DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=secret
    """

    access_token: JWTSettings = Field(description="Access-token related settings")

Bases: BaseModel

Settings related to JWT tokens.

Examples

.. code-block:: bash

DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=somesecret
DATA_RENTGEN__AUTH__ACCESS_KEY__EXPIRE_SECONDS=3600  # 1 hour
Source code in data_rentgen/server/settings/auth/jwt.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class JWTSettings(BaseModel):
    """Settings related to JWT tokens.

    Examples
    --------

    .. code-block:: bash

        DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=somesecret
        DATA_RENTGEN__AUTH__ACCESS_KEY__EXPIRE_SECONDS=3600  # 1 hour
    """

    secret_key: SecretStr = Field(
        description=textwrap.dedent(
            """
            Secret key for signing JWT tokens.

            Can be any string. It is recommended to generate random value for every application instance, e.g.:

            .. code:: shell

                pwgen 32 1
            """,
        ),
    )
    security_algorithm: str = Field(
        default="HS256",
        description=textwrap.dedent(
            """
            Algorithm used for signing JWT tokens.

            See `pyjwt <https://pyjwt.readthedocs.io/en/latest/algorithms.html>`_
            documentation.
            """,
        ),
    )
    expire_seconds: int = Field(
        default=10 * 60 * 60,
        description="Token expiration time, in seconds",
    )