OAuth2 per app mobili con client back-end riservato (è richiesta PKCE?)

1

Mi chiedo perché né rfc6749 rfc8252 sembrano considerare il caso in cui l' app per dispositivi mobili non > fare richieste di risorse protette (e quindi non è un client) ma si affida invece a un server di backend (client riservato) che lo fa.

* Nota che uso il app per dispositivi mobili al posto di app nativa solo perché la specifica definisce un'app nativa come client pubblico :

Da rfc6749

  • Sezione 2.1:

    A native application is a public client installed and executed on the device used by the resource owner. Protocol data and credentials are accessible to the resource owner. It is assumed that any client authentication credentials included in the application can be extracted. On the other hand, dynamically issued credentials such as access tokens or refresh tokens can receive an acceptable level of protection. At a minimum, these credentials are protected from hostile servers with which the application may interact. On some platforms, these credentials might be protected from other applications residing on the same device.

  • sezione 1.1:

    client - An application making protected resource requests on behalf of the resource owner and with its authorization

Il caso che sto chiedendo è simile a come rfc6749 sezione 2.1 definisce un'applicazione , ma invece di un'interfaccia utente HTML , l'interfaccia sarebbe una app per dispositivi mobili :

A web application is a confidential client running on a web server. Resource owners access the client via an HTML user interface rendered in a user-agent on the device used by the resource owner. The client credentials as well as any access token issued to the client are stored on the web server and are not exposed to or accessible by the resource owner.

La

rfc8252 la definizione di app nativa sembra più ragionevole in quanto non ne limita l'utilizzo alle app che sono client pubblici:

"native app" An app or application that is installed by the user to their device, as distinct from a web app that runs in the browser context only. Apps implemented using web-based technology but distributed as a native app, so-called "hybrid apps", are considered equivalent to native apps for the purpose of this specification.

Ma ancora una volta, la specifica fornisce solo le migliori pratiche nel caso in cui l' app nativa sia anche il client (pubblico).

In breve,

  1. Mi chiedo perché non sia stato in grado di trovare alcuna menzione del profilo del cliente che ho descritto sopra (nelle specifiche o altrove).
  2. Sarebbe stato preso in considerazione il grant di codice di autorizzazione ( senza PKCE ) abbastanza sicuro poiché anche se un'app dannosa intercetta il codice di autorizzazione (inviato dall'agente utente esterno al file app nativa, tramite comunicazione inter-app) non sarebbe in grado di scambiarlo per un token di accesso come non sarebbe in suo possesso il segreto del cliente che è memorizzato nel back-end?

Nota che sto solo facendo queste domande per ottenere una migliore comprensione della teoria, e non per nulla pratico.

    
posta catanman 30.05.2018 - 05:01
fonte

1 risposta

1

Il flusso che descrivi è esattamente ciò che Google offre per le app per dispositivi mobili: link

Dopo aver esaminato più dettagliatamente il rfc 6749, possiamo notare che questo flusso non rispetta le raccomandazioni.

link

The authorization server MUST:

o ensure that the authorization code was issued to the authenticated confidential client, or if the client is public, ensure that the code was issued to "client_id" in the request,

In effetti, il codice di autorizzazione è stato rilasciato all'app nativa, ed è l'applicazione web che tenta di scambiare il codice.

Spetta allo sviluppatore decidere se vuole rispettare rigorosamente la RFC e in questo caso utilizzare il codice di autorizzazione del flusso con PKCE quindi inviare il token di accesso al server di back-end in modo che possa accedere al server delle risorse; o se vuole usare lo stesso flusso di google.

    
risposta data 31.05.2018 - 09:50
fonte

Leggi altre domande sui tag