[PHP/JS] Hoe omgaan met token i.c.m. API?

Pagina: 1
Acties:

Vraag


Acties:
  • +1 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Ik heb twee services:
- https://api.local - Laravel backend
- https://app.local - VueJS frontend + Capacitor Android app

Ik wil een login doen vanuit de frontend/app naar https://api.local/v1/login, deze doet het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function __invoke($request)
{
    $token = $request->user()->createToken($request->device_name)->plainTextToken;

    // als test
    $cookie = cookie(
        name: 'test',
        value: 'foo',
        minutes: 45000,
        sameSite: 'None',
        secure: true,
        httpOnly: true,
    );

    return response()
        ->json(compact('token'))
        ->withCookie($cookie);
}

De cookie wordt niet gezet doordat cross-site cookie protectie deze (terecht) blokkeert, die vrijwel tegenwoordig in elke browser actief is. Als ik deze protectie uitzet, dan werkt het wel gewoon.

De reden om het via de API te doen, is dat je dan de flag httpOnly kan aanzetten en de frontend de cookie niet hoeft/kan uit lezen. Ik gebruik momenteel localStorage, dat werkt prima, maar wordt sterk afgeraden wegens XSS.

Ik kan het niet echt als SPA draaien (dus met proxy naar de API), aangezien ik het ook wil aanbieden als PWA en dus ook op de mobiel.

Zie ik iets over het hoofd? Ik heb van alles geprobeerd, CORS settings lijken te kloppen, maar ik heb geen enkel idee wat nu te doen.

Thanks!

Alle reacties


Acties:
  • +1 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 01-10 18:47
Wilde gok: moet je die cookie ook niet een domain meegeven? Als je geen domain meegeeft dan zal de cookie alleen maar werken voor de host die jij hebt (dus alleen api.local). Als je wel een domain meegeeft dan werkt 'ie ook voor subdomains. Dus dan moet je wel een domain gaan gebruiken, bv api.myapp.local en app.myapp.local

Of niet moeilijk doen en je API vanaf app.local/api/ toegankelijk gaan maken.

Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Kalentum schreef op zondag 19 maart 2023 @ 16:53:
Wilde gok: moet je die cookie ook niet een domain meegeven? Als je geen domain meegeeft dan zal de cookie alleen maar werken voor de host die jij hebt (dus alleen api.local). Als je wel een domain meegeeft dan werkt 'ie ook voor subdomains. Dus dan moet je wel een domain gaan gebruiken, bv api.myapp.local en app.myapp.local

Of niet moeilijk doen en je API vanaf app.local/api/ toegankelijk gaan maken.
Ja, dat werkt dan inderdaad wel. Dit kan gewoon met een proxy.

Alleen hoe je ga je dan met een token als je het als app (Android/iOS) aanbiedt? Dan is alsnog de origin anders.

Bij een PWA is het volgens mij hetzelfde.

Acties:
  • 0 Henk 'm!

Verwijderd

Zet je de cookie op domain, dan kunnen je subdomeinen ook bij de cookie. Als je dan je app in een subdomein hangt en cors goed hebt ingesteld, mag geen wildcards en je moet de headers, methods goed zetten.