Skip to content

Аутентификация и Авторизация

Обзор

Для доступа к эндпоинтам сервиса клиент должен пройти аутентификацию. Сервис предоставляет несколько вариантов для аутентификации.

В настоящее время сервис не реализует ролевую модель, и все пользователи имеют одинаковый уровень разрешений.

Аутентификация реализована через middleware следующим образом: перед каждым вызовом эндпоинта вызывается функция get_user(). Эта функция пытается получить имя пользователя из предоставленного токена.

Data Rentgen поддерживает различные реализации провайдеров аутентификации. Вы можете изменить реализацию через настройки:

Bases: BaseModel

Authorization-related settings.

Here you can set auth provider class along with its options.

Examples

.. code-block:: bash

DATA_RENTGEN__AUTH__PROVIDER=data_rentgen.server.providers.auth.dummy_provider.DummyAuthProvider

# pass access_key.secret_key = "secret" to DummyAuthProviderSettings
DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=secret
Source code in data_rentgen/server/settings/auth/__init__.py
 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
class AuthSettings(BaseModel):
    """Authorization-related settings.

    Here you can set auth provider class along with its options.

    Examples
    --------

    .. code-block:: bash

        DATA_RENTGEN__AUTH__PROVIDER=data_rentgen.server.providers.auth.dummy_provider.DummyAuthProvider

        # pass access_key.secret_key = "secret" to DummyAuthProviderSettings
        DATA_RENTGEN__AUTH__ACCESS_KEY__SECRET_KEY=secret
    """

    provider: ImportString = Field(  # type: ignore[assignment]
        default="data_rentgen.server.providers.auth.dummy_provider.DummyAuthProvider",
        description="Full name of auth provider class",
        validate_default=True,
    )
    # switching between auth provider class doesn't change how Personal Tokens are treated,
    # so these are in separate settings
    personal_tokens: PersonalTokenSettings = Field(
        default_factory=PersonalTokenSettings,
        description="Settings for generating Personal Access Tokens",
    )

    model_config = ConfigDict(extra="allow")

    @field_validator("provider", mode="after")
    @classmethod
    def _validate_provider(cls, value: type) -> type[AuthProvider]:
        if not issubclass(value, AuthProvider):
            msg = f"Class {value.__qualname__} is not a subclass of {AuthProvider}"
            raise TypeError(msg)
        return value

На данный момент сервис имеет два сценария для аутентификации:

  • Dummy(JWT Tokens) легковесный вариант для тестирования и разработки.
  • Аутентификация Keycloak рекомендуемый вариант. Интегрируется с Keycloak для токен-ориентированной аутентификации.

Провайдеры Аутентификации

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

Для разработчиков

Пользовательский провайдер аутентификации