# Авторизация: ApiKey, Credentials или OAuth 2.0

Решение GeoPard использует [AWS Cognito](https://docs.aws.amazon.com/en_us/cognito/latest/developerguide/what-is-amazon-cognito.html) для процедуры аутентификации.

Рекомендуется проверить все варианты авторизации. Выбор зависит от конкретного случая использования. Более подробное описание использования приведено для каждого варианта ниже.

## Вариант 1: Использование учетных данных

Авторизация с помощью «имени пользователя» и «пароля» — один из возможных подходов. В этом случае регистрация должна происходить по электронной почте (не через социальные сети).&#x20;

{% hint style="info" %}
Подход ***рекомендован для интеграции на уровне API (BackEnd)*** и все запросы к GeoPard API проксируются через специальный выделенный сервис (микросервис).
{% endhint %}

### Запрос на вход&#x20;

{% code overflow="wrap" lineNumbers="true" %}

```bash
curl --location --request POST 'https://api.geopard.tech/login' \
--header 'Content-Type: application/json' \
--header 'Content-Type: text/plain' \
--data-raw '{"username":"<email_address>","password":"<password>"}'
```

{% endcode %}

### Ответ на вход

{% hint style="danger" %}
Токен — это JWT с временем жизни 30 минут.\
\
Лучшей практикой является хранить один токен и повторно использовать его в запросах, проверяя время истечения и запрашивая новый токен при его истечении (или незадолго до).
{% endhint %}

```json
{
    "token": "<token_to_use_in_geopard_api>"
}
```

## Вариант 2: OAuth 2.0

AWS Cognito поддерживает протокол OAuth 2.0 для авторизации. Общий обзор описан в статье [Руководство Cognito по OAuth2](https://aws.amazon.com/ru/blogs/mobile/understanding-amazon-cognito-user-pool-oauth-2-0-grants/), подраздел Authorization Code Grant наиболее интересен в случае GeoPard.&#x20;

{% hint style="info" %}
Подход ***рекомендуется интегрировать GeoPard на уровне пользовательского интерфейса (FrontEnd)***. Интеграция работает в обоих направлениях для отправки/получения данных в/из GeoPard.
{% endhint %}

Кратко:

1. Ваше приложение должно перенаправить пользователя в GeoPard Cognito для входа или регистрации.&#x20;

Пример:

{% code overflow="wrap" lineNumbers="true" %}

```bash
curl --location --request GET '
https://auth.geopard.tech/oauth2/authorize?response_type=code&client_id=<connect_geopard_team>&redirect_uri=http://localhost:8080&state=54321
'
```

{% endcode %}

Пожалуйста, свяжитесь с командой GeoPard, чтобы получить индивидуальный для вашего приложения `client_id`.

2. Перенаправленный URL получит проверочный `код` для следующего шага.

Перенаправленный URL выглядит так [`http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a&state=54321`](http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a\&state=54321).

3. Ваше приложение должно обменять `код` для `токены` (`access_token`, `refresh_token`, `id_token`).

Пример:

{% code overflow="wrap" lineNumbers="true" %}

```bash
curl --location --request POST '
https://auth.geopard.tech/oauth2/token
' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: XSRF-TOKEN=365e14e1-3c66-477e-b0ef-a9e436a834ee; csrf-state=""; csrf-state-legacy=""' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a' \
--data-urlencode 'client_id=42ajne9u466in6gaf569nth9o9' \
--data-urlencode 'redirect_uri=
http://localhost:8080
'
```

{% endcode %}

## Вариант 3: API-ключ

Быстрый доступ к WMS и WFS периодически необходим. Поэтому можно использовать API-ключ GeoPard, автоматически генерируемый для каждого аккаунта.

API-ключ можно найти в `apiKey` атрибуте сущности GraphQL "UserData". Инструкции по получению  `apiKey` предоставлены [ЗДЕСЬ](https://docs.geopard.tech/geopard-tutorials/ru/dokumentaciya-api/obzor-zaprosov/38.-zapros-poluchit-userdata).

{% hint style="danger" %}
`apiKey` должен использоваться с `/geo` только для конечных точек.
{% endhint %}

Использование:

1. В качестве `geopardApiKey` параметра в URL GET-запроса.
2. В качестве `заголовка X-API-Key` в ЛЮБОМ запросе.<br>
