Discussioni sul sistema operativo Linux
 

[LUNGO] API Rest e provider oAuth esterni

gandalf.corvotempesta@gmail.com 24 Lug 2015 23:53
Scrivo qui, anche se è più un argomento di programmazione generale che PHP, ma
non ho trovato il gruppo apposito.

Ho un problema dal quale non riesco a venirne a capo.
La situazione è questa: webservice che esporta delle API RESTFul, frontend
javascript (con un po di php dietro), utenti che si devono collegare al
frontend, autenticandosi alle api mediante user/password OPPURE oauth di
provider esterni.

In una situazione normale, senza un webservice json di mezzo, il sito web
reindirizzerebbe l'utente alla pagina di login, in tale pagina l'utente sceglie
con quale provider autenticarsi, ed il sito web effettua tutta la procedura di
autenticazione arrivando ad ottenere un access token.

Facile, veloce, già fatto decine di volte senza problemi.

Ora però non ho un sito web ma un webservice, che risponde esclusivamente in
JSON alle richieste che possono provenire da chiunque (tra cui il mio frontend
javascript + PHP), ma sopratutto da cURL da linea di comando.

Questo rende impossibile effettuare ogni sorta di redirect o aprire ogni sorta
di browser, di conseguenza non so come implementare l'autenticazione oauth
verso, ad esempio, Google o GitHub.

Pensavo a questa bizzarra soluzione:
Le mie API si aspettano una autenticazione di base o una autenticazione Bearer
mediante access token. In caso di autenticazione base, autentico localmente, in
caso di token, rigiro il token al provider, lo faccio convalidare e se tutto OK
eseguo la richiesta dell'utente. Così facendo, però, ogni richiesta mediante
token comporta un controllo anche sul server remoto, con evidente calo di
performance e consdierato che le mie API sono REST, di richieste se ne fanno a
vagonate. (sono tante piccole richieste invece di una grossa singola)

Restano però tre problemi:

1. tutto l'"handshake" oauth, chi lo fa? Così facendo, le mie API si aspettano
un access token, ovvero una autenticazione già avvenuta da qualche parte fuori
dal mio controllo. Pensavo di usare il workflow implicito di oauth direttamente
sul client javascript. Il client sa di dover accedere a risorse protette (si
vede un bel 403 al primo tentativo), fa l'autenticazione oauth, riceve un token,
ripete la richiesta alla api passando il token. Tutto molto semplice, ma mi
sembra un tantino "fuori standard", non vorrei pregiudicare la futura
compatibilità con sviluppatori esterni

2. come faccio a sapere che il token passato sia quello di Google e non di
GitHub o Facebook? Da cosa lo riconosco? Pensavo di passare un header extra
tipo: "X-oAuth-Provider: google" in modo da identificare chi dover contattare
per la convalida, ma questo mi sembra più *****heria di prima.

3. con questa strana soluzione ciascun sviluppatore che vuole realizzare il
proprio client di accesso alle mie API dovrebbe registrare il proprio client
presso il provider oauth, complicando ulteriormente le cose. Normalmente, visto
che i dati di autenticazione servono a me e non allo sviluppatore finale, sono
io che devo registrare la mia app al provider.

Qualche idea ? Far autenticare il client per i fatti suoi e poi rigirarmi il
token non mi convince molto. Possibile che non ci sia qualche schema
implementativo su una autenticazione oauth a 3 segmenti (io, il provider,
l'enduser) che preveda l'uso di API stateless e client stupidi non in grado di
fare redirect o cose simili?

In altre parole, da curl o bash, senza browser o altro, come diavolo faccio
l'autenticazione oauth ? Mi autentico per i fatti miei (magari da un altro PC),
mi prendo il token e lo uso tramite curl? In pratica, replico la mia soluzione
dove l'enduser provvede per i fatti suoi ad autenticarsi., ma non vedo
alternative.
gandalf.corvotempesta@gmail.com 25 Lug 2015 10:27
Il giorno venerdì 24 luglio 2015 23:53:26 UTC+2, gandalf.co...@gmail.com ha
scritto:
> Scrivo qui, anche se è più un argomento di programmazione generale che PHP,
ma non ho trovato il gruppo apposito.

Azz, ho sbagliato gruppo, pensavo di essere su .php
Scusate.

(però, visto che ci sono, ogni suggerimento è ben accolto)

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Discussioni sul sistema operativo Linux | Tutti i gruppi | it.comp.os.linux.sys | Notizie e discussioni linux | Linux Mobile | Servizio di consultazione news.