# Autoryzacja: ApiKey, Credentials lub OAuth 2.0

Rozwiązanie GeoPard używa [AWS Cognito](https://docs.aws.amazon.com/en_us/cognito/latest/developerguide/what-is-amazon-cognito.html) do procedury uwierzytelniania.

Zalecamy sprawdzenie wszystkich opcji autoryzacji. Wybór zależy od konkretnego przypadku użycia. Więcej szczegółów dotyczących użycia opisano w każdej opcji poniżej.

## Opcja 1: Użycie poświadczeń

Autoryzacja za pomocą „nazwa użytkownika” i „hasło” jest jednym z możliwych podejść. W tym przypadku rejestracja przez e‑mail musi być wykonana (bez użycia sieci społecznościowych).&#x20;

{% hint style="info" %}
Podejście ***jest zalecane do integracji na poziomie API (BackEnd)*** i wszystkie żądania do API GeoPard są proxyfowane przez dedykowaną specjalną usługę (mikrousługę).
{% endhint %}

### Żądanie logowania&#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 %}

### Odpowiedź na logowanie

{% hint style="danger" %}
Token jest JWT o czasie życia 30 minut.\
\
Dobrą praktyką jest przechowywanie pojedynczego tokenu i ponowne jego wykorzystywanie we wszystkich żądaniach, sprawdzając czas wygaśnięcia i pobierając nowy token, gdy wygaśnie (lub krótko przed wygaśnięciem).
{% endhint %}

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

## Opcja 2: OAuth 2.0

AWS Cognito obsługuje protokół OAuth 2.0 dla autoryzacji. Ogólny przegląd opisano w artykule [Podręcznik Cognito OAuth2](https://aws.amazon.com/ru/blogs/mobile/understanding-amazon-cognito-user-pool-oauth-2-0-grants/), podartykuł Authorization Code Grant jest najbardziej interesujący w przypadku GeoPard.&#x20;

{% hint style="info" %}
Podejście ***jest zalecane integrowanie GeoPard na poziomie interfejsu użytkownika (FrontEnd)***. Integracja działa w obie strony w celu wysyłania/odbierania danych do/z GeoPard.
{% endhint %}

W skrócie:

1. Twoja aplikacja musi przekierować użytkownika do GeoPard Cognito w celu zalogowania się lub rejestracji.&#x20;

Przykład:

{% 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 %}

Prosimy o kontakt z zespołem GeoPard, aby otrzymać indywidualny dla Twojej aplikacji `client_id`.

2. Przekierowany URL otrzyma weryfikacyjny `kod` do następnego kroku.

Przekierowany URL wygląda jak [`http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a&state=54321`](http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a\&state=54321).

3. Twoja aplikacja musi wymienić `kod` dla `tokeny` (`access_token`, `refresh_token`, `id_token`).

Przykład:

{% 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 %}

## Opcja 3: Klucz API

Szybki dostęp do WMS i WFS jest od czasu do czasu konieczny. Dlatego można użyć klucza API GeoPard automatycznie generowanego dla każdego konta.

Klucz API można znaleźć w `kluczApi` atrybucie encji GraphQL "UserData". Instrukcje, jak pobrać  `kluczApi` są podane [TUTAJ](https://docs.geopard.tech/geopard-tutorials/pl/dokumentacja-api/przeglad-zadan-api-geopard/38.-zapytanie-pobierz-userdata).

{% hint style="danger" %}
`kluczApi` musi być używany z `/geo` punktami końcowymi TYLKO.
{% endhint %}

Użycie:

1. Jako `geopardApiKey` parametr w URL żądania GET.
2. Jako `nagłówek X-API-Key` we WszELKIM żądaniu.<br>
