# Authenticatie

Elk verzoek dat de CLI verstuurt, draagt een API-sleutel van je project. Sla sleutels één keer op met `status200 login`, één context per omgeving, of geef ze aan een opdracht mee in vlaggen of omgevingsvariabelen, zoals scripts doen. Deze pagina laat elke manier zien, en welke een opdracht gebruikt als er meerdere zijn.

:::cards
- [Inloggen](#inloggen): Een API-sleutel en het adres van je Status200 opslaan.
- [Contexten](#contexten): Een opgeslagen login per project of omgeving, en het wisselen ertussen.
- [Welke inloggegevens een opdracht gebruikt](#welke-inloggegevens-een-opdracht-gebruikt): Eerst vlaggen, dan omgevingsvariabelen, dan contexten.
- [Problemen oplossen](#problemen-oplossen): Geen inloggegevens gevonden, ongeldige sleutels en weigeringen.
:::

## Voordat je begint

Je hebt een API-sleutel van je project nodig. Maak er een aan in **Projectinstellingen → Geavanceerd → API-sleutels** met **API-sleutel aanmaken**, en geef hem de toegang die je opdrachten nodig hebben: zie [Een API-sleutel aanmaken](/docs/api-reference/api-reference#een-api-sleutel-aanmaken). Een sleutel doet wat zijn rechten toestaan: een sleutel die records alleen mag lezen, kan ze tonen en lezen, maar niet wijzigen.

Op Status200 Cloud werken API-sleutels alleen zolang het project het **Growth**-abonnement of hoger heeft. Daaronder antwoordt elke opdracht met `API error (402)` en een melding die het abonnement noemt, tot het project wordt geüpgraded; dan werkt dezelfde sleutel weer. Zie [API-sleutels en SCIM onder hun abonnement](/docs/api-reference/api-reference#api-sleutels-en-scim-onder-hun-abonnement).

## Inloggen

`status200 login` slaat een API-sleutel en het adres van je Status200 op als context, en maakt die de huidige context:

```bash
status200 login <api-key> <instance-url> [--context-name <name>]
```

| Argument of optie | Wat het is |
| --- | --- |
| `<api-key>` | Een API-sleutel van je project |
| `<instance-url>` | Het adres van je Status200: `https://status200.ru`, of dat van je eigen server, zoals `https://status200.example.com` |
| `--context-name <name>` | De naam waaronder de context wordt opgeslagen. Standaard: `default` |

Bijvoorbeeld een context met de naam `production`:

```bash
status200 login <api-key> https://status200.ru --context-name production
```

Hij antwoordt `Logged in successfully. Context "production" is now active.` Een schuine streep aan het eind van het adres wordt verwijderd, en opnieuw inloggen onder dezelfde naam vervangt die context.

> [!NOTE]
> `login` slaat de sleutel op zonder Status200 ernaar te vragen. Voer een opdracht uit, zoals `status200 incident count`, om te zien dat de sleutel werkt.

## Contexten

Een context is een opgeslagen login: een naam, een adres en een API-sleutel. Sla er een op per project of omgeving en kies er dan een voor alle opdrachten die volgen, of voor één opdracht.

:::steps
### Een context per omgeving opslaan

```bash
status200 login <production-api-key> https://status200.ru --context-name production
status200 login <staging-api-key> https://status200.example.com --context-name staging
```

Elke login maakt zijn context de huidige, dus nu is `staging` de huidige.

### Ze tonen

```bash
status200 context list
```

```text
┌───┬────────────┬───────────────────────────────┐
│   │ Name       │ URL                           │
├───┼────────────┼───────────────────────────────┤
│   │ production │ https://status200.ru          │
├───┼────────────┼───────────────────────────────┤
│ * │ staging    │ https://status200.example.com │
└───┴────────────┴───────────────────────────────┘
```

Het `*` markeert de huidige context. API-sleutels worden nooit getoond.

### Naar een andere context wisselen

```bash
status200 context use production
```

Hij antwoordt `Switched to context "production".` en de opdrachten die volgen gebruiken die.

### Een context voor één opdracht gebruiken

```bash
status200 incident list --context staging
```

De huidige context blijft zoals hij was.
:::

| Opdracht | Wat hij doet |
| --- | --- |
| `status200 context list` | Toont de opgeslagen contexten; `*` markeert de huidige. Met `-o json` van elke context de `name`, `apiUrl` en `isCurrent`, nooit de sleutel |
| `status200 context use <name>` | Maakt een opgeslagen context de huidige |
| `status200 context current` | Toont de naam, de URL en de API-sleutel van de huidige context, de sleutel verborgen op de eerste vier en laatste vier tekens na |
| `status200 context delete <name>` | Verwijdert een opgeslagen context. Was het de huidige, dan wordt de eerste overgebleven context de huidige |

## Welke inloggegevens een opdracht gebruikt

Een opdracht heeft een API-sleutel en een URL nodig. Hij haalt elk van de twee van de eerste van deze plaatsen die er een heeft:

```mermaid title="Waar een opdracht zijn API-sleutel en zijn URL vindt"
flowchart TB
    F["1. Vlaggen bij de opdracht:<br/>--api-key en --url"] --> E["2. Omgevingsvariabelen:<br/>STATUS200_API_KEY<br/>en STATUS200_URL"]
    E --> N["3. De context die<br/>--context noemt"]
    N --> C["4. De huidige context"]
    C --> X["Nergens gevonden:<br/>de opdracht stopt"]
```

Je kunt ze dus combineren: bijvoorbeeld een API-sleutel uit een omgevingsvariabele met de URL van de huidige context. Omgevingsvariabelen passen bij scripts en CI-jobs, die geen opgeslagen contexten hebben:

:::tabs
@tab Linux
```bash
export STATUS200_API_KEY=<api-key>
export STATUS200_URL=https://status200.ru
status200 incident list
```
@tab macOS
```bash
export STATUS200_API_KEY=<api-key>
export STATUS200_URL=https://status200.ru
status200 incident list
```
@tab Windows
```powershell
$env:STATUS200_API_KEY = "<api-key>"
$env:STATUS200_URL = "https://status200.ru"
status200 incident list
```
:::

Vlaggen gaan voor al het andere, voor één opdracht:

```bash
status200 --api-key <api-key> --url https://status200.ru incident list
```

> [!WARNING]
> Een sleutel die als vlag is meegegeven, komt in je shellgeschiedenis terecht, en andere gebruikers van de machine kunnen hem in de proceslijst zien. Gebruik op een gedeelde machine liever een context of een omgevingsvariabele.

## Controleren wat de CLI gaat gebruiken

`status200 whoami` toont de URL en de API-sleutel die de volgende opdracht gebruikt, en de context waar ze vandaan komen:

```bash
status200 whoami
```

```text
URL:     https://status200.ru
API Key: 4f1c****0a13
Context: production
```

Alleen de eerste vier en de laatste vier tekens van de sleutel worden getoond. De regel `Context` verschijnt alleen als de URL en de sleutel die van de context zelf zijn, en geen waarden die een vlag of een omgevingsvariabele heeft vervangen. `whoami` leest je instellingen zonder Status200 aan te roepen: hij toont wat een opdracht zal versturen, niet of Status200 het accepteert. Is er niets opgeslagen of ingesteld, dan antwoordt hij:

```text
Not authenticated. Run `status200 login` to authenticate.
```

## Het configuratiebestand

`status200 login` slaat contexten op in `~/.oneuptime/config.json`, in je thuismap (`%USERPROFILE%\.oneuptime\config.json` op Windows). De CLI maakt het zo aan dat alleen jouw gebruiker het kan lezen en schrijven (modus `0600`):

```json title="~/.oneuptime/config.json"
{
  "currentContext": "production",
  "contexts": {
    "production": {
      "name": "production",
      "apiUrl": "https://status200.ru",
      "apiKey": "<api-key>"
    },
    "staging": {
      "name": "staging",
      "apiUrl": "https://status200.example.com",
      "apiKey": "<api-key>"
    }
  }
}
```

Het bestand bevat de API-sleutels zoals ze zijn: houd het buiten gedeelde mappen, back-ups en repository's. Om uit één context uit te loggen, verwijder je hem met `status200 context delete <name>`; om uit alle uit te loggen, verwijder je het bestand. Een sleutel die mogelijk is uitgelekt, blijft geldig tot je hem in Status200 verwijdert, in **Projectinstellingen → Geavanceerd → API-sleutels**.

Uitvoerformaten en lijstgroottes worden hier niet opgeslagen: geef `-o` en `--limit` aan elke opdracht mee.

## Problemen oplossen

:::details De melding "No credentials found"
`Authentication error: No credentials found.` betekent dat geen vlag, omgevingsvariabele of opgeslagen context de opdracht zijn API-sleutel en URL heeft gegeven. Voer `status200 login` uit, of stel zowel `STATUS200_API_KEY` als `STATUS200_URL` in. De opdracht eindigt met code `2`.
:::

:::details De melding "API error (400): Invalid API Key"
De sleutel is geen API-sleutel van Status200, is verlopen of is opnieuw ingesteld. Kopieer hem opnieuw van zijn pagina in **Projectinstellingen → Geavanceerd → API-sleutels**, waar ook zijn datum onder **Verloopt** staat, en log opnieuw in onder dezelfde contextnaam. De opdracht eindigt met code `2`.
:::

:::details De melding "API error (402): API keys need the Growth plan"
Op Status200 Cloud zit het project onder het **Growth**-abonnement, dus de API-sleutels ervan werken niet meer. Upgrade het project, en dezelfde sleutel werkt weer: in de CLI hoeft niets te veranderen.
:::

:::details De melding "API error (422): You do not have permissions"
De rechten van de sleutel reiken niet tot wat de opdracht vraagt. Geef de sleutel een rol of een recht op zijn pagina in **Projectinstellingen → Geavanceerd → API-sleutels**: de melding noemt de rechten die het verzoek zouden doorlaten.
:::

:::details De melding "Context "staging" does not exist"
Er is geen context met die naam opgeslagen. `status200 context list` toont de namen die er zijn.
:::

:::details whoami toont een andere URL of sleutel dan de context heeft
Een omgevingsvariabele of een vlag vervangt de waarde van de context. `env | grep ONEUPTIME` toont de variabelen die zijn ingesteld, en `unset STATUS200_API_KEY STATUS200_URL` brengt je terug naar je contexten.
:::

:::details Het verzoek naar het adres mislukt
`Error: Request failed to https://...` betekent dat de CLI Status200 op dat adres niet kon bereiken. Controleer de URL met `status200 whoami`: het is het adres waarop je Status200 opent, met `https://`, zoals `https://status200.ru`.
:::

## Volgende stappen

:::cards
- [Bewerkingen op bronnen](/docs/cli/resource-operations): Records tonen, lezen, maken, wijzigen, verwijderen en tellen.
- [Scripting en CI/CD](/docs/cli/scripting): Een pipeline zijn sleutel geven in omgevingsvariabelen.
- [Status200 API-referentie](/docs/api-reference/api-reference): Wat een API-sleutel mag doen, en wat elk antwoord betekent.
:::
