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

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

Ми рекомендуємо перевірити всі варіанти авторизації. Вибір залежить від конкретного випадку використання. Детальніше про застосування описано в кожному з варіантів нижче.

## Варіант 1: Використання облікових даних

Авторизація за допомогою «username» та «password» — один із можливих підходів. У цьому випадку реєстрація має відбуватися за електронною поштою (без використання соціальних мереж).&#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 manual](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 Key

Іноді потрібен швидкий доступ до WMS та WFS. Тому можливо використовувати API-ключ GeoPard, який автоматично генерується для кожного облікового запису.

API-ключ можна знайти в `apiKey` атрибуті сутності GraphQL "UserData". Інструкції щодо отримання  `apiKey` надані [ТУТ](https://docs.geopard.tech/geopard-tutorials/ukrainian/dokumentaciya-api/oglyad-zapitiv-geopard-api/38.-zapit-otrimati-userdata).

{% hint style="danger" %}
`apiKey` повинні використовуватися з `/geo` ендпойнтами ТІЛЬКИ.
{% endhint %}

Використання:

1. Як `geopardApiKey` параметр у URL GET-запиту.
2. Як `заголовок X-API-Key` в БУДЬ-ЯКОМУ запиті.<br>
