# Autorisation: ApiKey, Credentials eller OAuth 2.0

GeoPard-løsningen bruger [AWS Cognito](https://docs.aws.amazon.com/en_us/cognito/latest/developerguide/what-is-amazon-cognito.html) til godkendelsesproceduren.

Vi anbefaler at tjekke alle autorisationsmuligheder. Valget afhænger af den konkrete brugssag. Flere brugsdetaljer er beskrevet under hver mulighed nedenfor.

## Valgmulighed 1: Brug af legitimationsoplysninger

Godkendelse med “brugernavn” og “adgangskode” er en af de mulige tilgange. I dette tilfælde skal e-mail-registrering foretages (ikke ved brug af sociale netværk).&#x20;

{% hint style="info" %}
Tilgangen ***anbefales til integration på API- (BackEnd-) niveau*** og alle forespørgsler til GeoPard API proxyes via en dedikeret specialtjeneste (microservice).
{% endhint %}

### Login-anmodning&#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 %}

### Login-svar

{% hint style="danger" %}
Tokenet er et JWT med en levetid på 30 minutter.\
\
Det er bedste praksis at gemme ét token og genbruge det på tværs af alle forespørgsler, kontrollere dets udløbstid og hente et nyt token, når det udløber (eller kort før).
{% endhint %}

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

## Valgmulighed 2: OAuth 2.0

AWS Cognito understøtter OAuth 2.0-protokollen til autorisation. Den generelle oversigt er beskrevet i artiklen [Cognito OAuth2-manual](https://aws.amazon.com/ru/blogs/mobile/understanding-amazon-cognito-user-pool-oauth-2-0-grants/), underartiklen Authorization Code Grant er den mest interessante i GeoPard-tilfælde.&#x20;

{% hint style="info" %}
Tilgangen ***anbefales til integration af GeoPard på brugergrænsefladen (FrontEnd-) niveau***. Integration fungerer i begge retninger for at sende/modtage data til/fra GeoPard.
{% endhint %}

For at holde det kort:

1. Din applikation skal omdirigere en bruger til GeoPard Cognito for login eller registrering.&#x20;

Eksempel:

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

Kontakt venligst GeoPard-teamet for at modtage din applikations individuelle `client_id`.

2. Den videresendte URL vil modtage en verifikations `code` til næste trin.

Den videresendte URL ser sådan ud [`http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a&state=54321`](http://localhost:8080/?code=eb10956a-6d51-49e5-bbfe-9815e3fdc70a\&state=54321).

3. Din applikation skal udveksle `code` for `tokens` (`access_token`, `refresh_token`, `id_token`).

Eksempel:

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

## Valgmulighed 3: API-nøgle

Hurtig adgang til WMS og WFS er nogle gange nødvendig. Derfor er det muligt at bruge GeoPard API-nøglen, der automatisk genereres for hver konto.

API-nøglen kan findes i `apiNøgle` attributten af "UserData" GraphQL-entiteten. Instruktioner om, hvordan man henter  `apiNøgle` er angivet [HER](https://docs.geopard.tech/geopard-tutorials/dnk/api-dokumentation/oversigt-over-foresporgsler/38.-foresporgsel-hent-userdata).

{% hint style="danger" %}
`apiNøgle` skal bruges med `/geo` endpoints KUN.
{% endhint %}

Brug:

1. Som en `geopardApiKey` parameter i GET-forespørgslens URL.
2. Som en `X-API-Key` header i ENHVER forespørgsel.<br>
