> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# WS-App-Login

> Anmeldung im WEBSALE Shop aus einer externen App über GetToken, GetSID, Register und Logout, ohne das Shop-Passwort in der App zu speichern.

WS-App-Login ermöglicht die Anmeldung in einem WEBSALE Shop aus einer server-, PC- oder smartphonebasierten Anwendung heraus. Der Kern der Schnittstelle ist ein Token: Die App speichert nie das Shop-Passwort, sondern nur ein Token, mit dem sie bei Bedarf eine Session eröffnet.

| Eigenschaft | Wert |
| - | - |
| Übertragungsrichtung | Externe App → WEBSALE Shop (Data-to-Shop) |
| Übertragungsart | REST |
| Format | JSON |

In dieser Beschreibung steht **App** für die Anwendung und **Gerät** für deren Trägersystem, also Server, Desktop-Rechner, Tablet oder Smartphone.

## Warum kein Passwort in der App liegt

Der Benutzer gibt E-Mail-Adresse und Passwort einmal in der App ein, die Daten gehen an den Shop. Die App darf das Shop-Passwort nicht speichern. Damit der Benutzer sich trotzdem nicht bei jedem Shop-Besuch neu anmelden muss, fordert die App stattdessen ein Token an, ein JSON Web Token nach RFC 7519. Dieses Token darf sie dauerhaft speichern und damit später eine Session eröffnen.

Die Verbindung zum Shopserver muss immer über SSL laufen. Unverschlüsselte Verbindungen lehnt der Shop ab. Die Kommunikation erfolgt per REST, die Inhalte werden als JSON übergeben.

## Die vier Funktionen

| Funktion | Wofür |
| - | - |
| `GetToken` | Fordert mit den Login-Daten eines bestehenden Kontos und der GeräteID ein dauerhaft speicherbares Token an |
| `GetSID` | Fordert mit Token und GeräteID eine Session-ID an. Eine Session läuft standardmäßig nach zwei Stunden ab. |
| `Register` | Legt einen neuen Benutzer im Shop an |
| `Logout` | Beendet die Session |

Alle vier liegen unter `https://Ihre-Shop-Domain/_api/shop/AppLogin/` und werden per POST aufgerufen.

Im Fehlerfall antwortet der Shop durchgängig mit dem HTTP-Code 400 und diesem Rumpf:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "ErrCode": "Fehlercode",
  "ErrMsg": "Fehlermeldung in der Sprache des Shops, optional"
}
```

## GetToken

`POST https://Ihre-Shop-Domain/_api/shop/AppLogin/GetToken`

Header `Content-Type: application/json`, Rumpf:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "email": "E-Mail-Adresse",
  "password": "Passwort",
  "deviceid": "GeräteID"
}
```

Antwort bei Erfolg, HTTP-Code 200:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "token": "ey6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp..."
}
```

Dieses Token speichert die App dauerhaft.

## GetSID

`POST https://Ihre-Shop-Domain/_api/shop/AppLogin/GetSID`

Header `X-Authorization: Bearer TOKEN`, Rumpf:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "deviceid": "GeräteID"
}
```

Antwort bei Erfolg, HTTP-Code 200:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "sid": "12aa3318987654bccbff991155226677"
}
```

Die Session-ID kann die App speichern, wenn sie mehrere Verlinkungen in den Shop ausführt.

## Register

`POST https://Ihre-Shop-Domain/_api/shop/AppLogin/Register`

Header `Content-Type: application/json`, Rumpf:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "email": "E-Mail-Adresse",
  "password": "Passwort"
}
```

Bei Erfolg antwortet der Shop mit HTTP-Code 200 ohne Inhalt. Danach fordern Sie über `GetToken` ein Token an.

Ein Benutzer lässt sich nur anlegen, wenn zu der E-Mail-Adresse noch kein Konto existiert. Zusätzlich prüft der Shop das Passwort gegen seine Güte-Richtlinien. Als Faustregel gilt:

* mindestens 8 Zeichen
* mindestens ein Buchstabe, eine Ziffer und ein Sonderzeichen
* nicht identisch oder zu ähnlich zur E-Mail-Adresse

Die tatsächlich eingestellten Richtlinien erfragen Sie bei der WEBSALE AG. Planen Sie in der App ein, dass `Register` am Passwort scheitern kann, und geben Sie die Fehlermeldung an den Benutzer weiter.

## Logout

`POST https://Ihre-Shop-Domain/_api/shop/AppLogin/Logout`

Header `Content-Type: application/json` und `X-Authorization: Bearer TOKEN`, Rumpf:

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
  "sid": "Session-ID"
}
```

Das Token ist hier zwingend erforderlich. Bei Erfolg antwortet der Shop mit HTTP-Code 200 ohne Inhalt.

## Verlinkung in den Shop

Sobald eine Session-ID vorliegt, verlinken Sie aus der App in den Shop. Der Benutzer ist in dieser Session bereits angemeldet. Die Session-ID hängen Sie als Parameter `sid` an die Adresse:

| Ziel | Adresse |
| - | - |
| Startseite | `https://Ihre-Shop-Domain/?sid=<Session-ID>` |
| Einzelnes Produkt | `https://Ihre-Shop-Domain/SEO-Produkt-Name/?sid=<Session-ID>` |
| Kategorie | `https://Ihre-Shop-Domain/SEO-Kategorie-Name/?sid=<Session-ID>` |

Beispiel für ein Produkt:

```
https://Ihre-Shop-Domain/Reithose-Felix/?sid=12aa3318987654bccbff991155226677
```

## Fehlercodes

Codes, die als „intern" gekennzeichnet sind, zeigen Sie dem Benutzer nicht an. Sie dienen der Diagnose durch die WEBSALE AG.

### Anmeldung

| Code | Beschreibung |
| - | - |
| 2002 | Keine E-Mail-Adresse angegeben |
| 2003 | Kein Passwort angegeben |
| 2004 | Zu viele fehlgeschlagene Loginversuche, Login zeitweise gesperrt |
| 2008, 2009 | Login nicht erfolgreich |
| 2011 | Keine Berechtigung für den gewünschten Subshop |
| 2000, 2001, 2005 bis 2007, 2010, 2012 | Intern |

### Registrierung

| Code | Beschreibung |
| - | - |
| 3002, 3003 | Keine gültige E-Mail-Adresse |
| 3004 | Passwort zu kurz |
| 3005 | Passwort und E-Mail-Adresse zu ähnlich |
| 3006 | Passwort gleich E-Mail-Adresse |
| 3007 | Passwort zu einfach |
| 3008 | Passwort enthält zu viele identische Zeichen |
| 3009 | Passwort und Wiederholung stimmen nicht überein |
| 3011 | E-Mail-Adresse existiert bereits |
| 3020 | E-Mail-Adresse und Passwort entsprechen nicht den Anforderungen |
| 3021 | E-Mail-Adresse nicht angegeben |
| 3022 | E-Mail-Adresse zu lang |
| 3023 | Passwort nicht angegeben |
| 3024 | Passwort zu lang |
| 3025 | Zeichenklassenfehler |
| 3026 | Palindromfehler |
| 3027 | Wörterbuchcheck fehlgeschlagen |
| 3028 | Rückwärtswörterbuchcheck fehlgeschlagen |
| 3000, 3001, 3010, 3012, 3014 bis 3018 | Intern |

## Verwandte Themen

* Wegweiser: [Service und App](https://dokumentation.websale.de/v8s/schnittstellen/service-und-app.md)
* Wegweiser: [WEBSALE App](https://dokumentation.websale.de/v8s/schnittstellen/service-und-app/websale-app.md)
* Wegweiser: [Session-Verwaltung](https://dokumentation.websale.de/v8s/einstellungen/session-verwaltung.md)


## Related topics

- [WEBSALE App](https://dokumentation.websale.de/v8s/schnittstellen/service-und-app/websale-app.md)
- [Service und App](https://dokumentation.websale.de/v8s/schnittstellen/service-und-app.md)
- [$wsAccount - Account & Adressdaten](https://dokumentation.websale.de/frontend/referenz/module/wsAccount.md)
- [Materialien Abo-Modul](https://dokumentation.websale.de/v8s/materialien/materialien-abo-modul.md)
- [Anmeldung und Registrierung](https://dokumentation.websale.de/v8s/kundenkonto/anmeldung-registrierung.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.