+++
title = "Добавить аутентификацию для плагинов источников данных"
aliases = ["/docs/harvest/latest/plugins/developing/auth-for-datasources/", "/docs/harvest/latest/developers/plugins/authentication/"]
+++

# Добавить аутентификацию для плагинов источника данных

На этой странице объясняется, как использовать прокси-сервер источника данных Harvest для аутентификации с помощью стороннего API из плагина источника данных.

Когда пользователь сохраняет пароль или любые другие конфиденциальные данные в качестве опции источника данных, Harvest шифрует данные и сохраняет их в базе данных Harvest. Любые параметры зашифрованного источника данных могут быть расшифрованы только на сервере Harvest. Это означает, что любой источник данных, который выполняет аутентифицированные запросы, должен запрашивать расшифрованные данные для отправки в браузер.

Чтобы свести к минимуму объем конфиденциальной информации, отправляемой в браузер и из него, плагины источника данных могут использовать Harvest _data source proxy_. При использовании прокси-сервера источника данных любые запросы, содержащие конфиденциальную информацию, проходят через сервер Harvest. Никакие конфиденциальные данные не отправляются в браузер после сохранения данных.

Некоторые источники данных, такие как [Prometheus]({{< relref "../../datasources/prometheus.md" >}}) и [InfluxDB]({{< relref "../../datasources/influxdb" >}}), позволяют пользователям настраивать, следует ли использовать данные исходный прокси-сервер с помощью параметра, называемого _access modes_.

## Добавьте прокси-маршрут в свой плагин

Чтобы пересылать запросы через прокси-сервер Harvest, вам необходимо настроить один или несколько _routes_. Маршрут определяет, как прокси-сервер преобразует исходящие запросы. Все маршруты для данного плагина определены в [plugin.json]({{< relref "metadata.md " >}}) файл.

Давайте добавим маршрут к прокси-запросам, чтобы `https://api.example.com/foo/bar `.

1. Добавьте маршрут в `plugin.json`. Обратите внимание, что вам необходимо перезагружать сервер Harvest каждый раз, когда вы вносите изменения в свой файл plugin.json.

   ```json
   "routes": [
     {
       "path": "example",
       "url": "https://api.example.com"
     }
   ]
   ```

1. В "Источнике данных" извлеките URL-адрес прокси-сервера из "Настроек экземпляра" в свойство класса с именем "url".

   ```ts
   export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
     url?: string;

     constructor(instanceSettings: DataSourceInstanceSettings<MyDataSourceOptions>) {
       super(instanceSettings);

       this.url = instanceSettings.url;
     }

     // ...

   }
   ```

1. В методе `query` сделайте запрос, используя [BackendSrv]({{< < "../../packages_api/runtime/backendsrv.md" >}}).

   ```ts
   const routePath = '/example';

   getBackendSrv()
     .datasourceRequest({
       url: this.url + routePath + '/foo/bar',
       method: 'GET',
     });
   ```

## Добавьте динамический прокси-маршрут в свой плагин

В приведенном выше примере URL-адрес остается неизменным для всех, кто использует плагин. Давайте посмотрим, как вы можете создавать динамические маршруты на основе параметров источника данных, предоставляемых пользователем.

Многие свойства объекта `route` могут использовать шаблоны в форме `{{ .jsonData.YOUR_OPTION_NAME }}`, где `YOUR_OPTION_NAME` - это имя свойства объекта `jsonData`.

```json
"routes": [
  {
    "path": "example",
    "url": "https://api.example.com/projects/{{ .JsonData.projectId }}"
  }
]
```

Вы также можете получить доступ к конфиденциальным данным в конфигурации вашего маршрута, изменив `.Json Data` на `.Secure Json Data`.

```json
"routes": [
  {
    "path": "example",
    "url": "https://{{ .JsonData.username }}:{{ .SecureJsonData.password }}@api.example.com"
  }
]
```

Теперь вы знаете, как определить маршруты для вашего плагина источника данных. Далее давайте рассмотрим, как проверять подлинность запросов для ваших маршрутов.

## Настройка метода проверки подлинности для маршрута

Прокси-сервер Harvest поддерживает несколько различных методов аутентификации. Для получения дополнительной информации о том, как настроить каждый метод аутентификации, обратитесь к [plugin.json]({{< rel ref "metadata.md " >}}).

Для любых конфиденциальных данных убедитесь, что вы зашифровали параметры источника данных и используете `{{ .Защищайте данные Json.YOUR_OPTION_NAME }}` при использовании конфиденциальных параметров источника данных в ваших маршрутах.

### Добавить HTTP-заголовок

Чтобы добавить HTTP-заголовки к прокси-запросам, используйте свойство `headers`.

```json
"routes": [
  {
    "path": "example",
    "url": "https://api.example.com",
    "headers": [
      {
        "name": "Authorization",
        "content": "Bearer {{ .SecureJsonData.apiToken }}"
      }
    ]
  }
]
```

### Добавить параметры URL-адреса

Чтобы добавить параметры URL-адреса к прокси-запросам, используйте свойство `urlParams`.

```json
"routes": [
  {
    "path": "example",
    "url": "http://api.example.com",
    "urlParams": [
      {
        "name": "apiKey",
        "content": "{{ .SecureJsonData.apiKey }}"
      }
    ]
  }
]
```

### Установить содержимое тела

Чтобы задать содержание тела и длину запросов прокси-серверов, используйте свойство `body`.

```json
"routes": [
  {
    "path": "example",
    "url": "http://api.example.com",
    "body": {
      "username": "{{ .JsonData.username }}",
      "password": "{{ .SecureJsonData.password }}"
    }
  }
]
```

### Включить проверку подлинности токена

Чтобы включить проверку подлинности на основе токенов для прокси-запросов, используйте свойство `token Auth`.

Harvest автоматически обновляет токен по истечении срока его действия.

```json
"routes": [
  {
    "path": "example",
    "url": "https://api.example.com",
    "tokenAuth": {
      "url": "https://login.example.com/oauth2/token",
      "params": {
        "grant_type": "client_credentials",
        "client_id": "{{ .JsonData.clientId }}",
        "client_secret": "{{ .SecureJsonData.clientSecret }}"
      }
    }
  }
]
```
