Configurare l'accesso per provider e ruoli

Completato

Con l'autenticazione utente attivata, l'app Web per la lista della spesa necessita di un modo per limitare l'accesso ad alcune pagine per gli utenti che non hanno eseguito l'accesso e per consentire l'accesso solo tramite provider specifici.

Si analizzerà la configurazione del routing e i ruoli in App Web statiche di Azure per ottimizzare l'accesso utente all'app Web.

File di configurazione per App Web statiche di Azure

La configurazione per App Web statiche di Azure è definita nel file staticwebapp.config.json che controlla le impostazioni seguenti:

  • Definizione dei percorsi di trasferimento
  • Authentication
  • Autorizzazione
  • Regole di fallback
  • Override della risposta HTTP
  • Definizioni delle intestazioni HTTP globali
  • Tipi MIME personalizzati

Il percorso consigliato per staticwebapp.config.json si trova nella cartella impostata come app_location scelta durante la distribuzione. Tuttavia, il file può essere inserito in qualsiasi percorso all'interno della cartella del codice sorgente dell'applicazione.

Per questo caso d'uso, verrà analizzata la configurazione del routing per raggiungere gli obiettivi desiderati.

Limitare i provider di autenticazione

In una sezione precedente si è visto che per impostazione predefinita tutti i provider di autenticazione sono abilitati. È possibile modificare questo comportamento aggiungendo regole di routing nella configurazione.

Ad esempio, per disabilitare l'accesso tramite il provider di GitHub, è possibile aggiungere una regola di routing simile alla seguente nel file staticwebapp.config.json.

{
  "routes": [
    {
      "route": "/.auth/login/github",
      "statusCode": 404
    }
  ]
}

Forzare la route /.auth/login/github usata per l'autenticazione con il provider di GitHub per restituire un errore 404 (non trovato) in modo che gli utenti non possano accedervi. È possibile aggiungere il numero di regole di routing desiderato per disabilitare tutti i provider che non si vogliono usare.

Proteggere le route con i ruoli

Per impostazione predefinita, le route sono accessibili a tutti gli utenti senza restrizioni. È possibile proteggere le route aggiungendo uno o più nomi di ruolo nella matrice allowedRoles di una regola. Per impostazione predefinita, ogni utente appartiene al ruolo anonymous predefinito e tutti gli utenti connessi sono membri del ruolo authenticated.

Ciò significa che per limitare una route solo agli utenti autenticati è possibile aggiungere il ruolo authenticated predefinito alla matrice allowedRoles.

{
  "routes": [
    {
      "route": "/profile",
      "allowedRoles": ["authenticated"]
    }
  ]
}

Con questa configurazione, se un utente non autenticato tenta di accedere alla route /profile verrà restituito un errore 401 (non autorizzato).

È anche possibile limitare metodi HTTP specifici per una determinata route, come segue:

{
  "routes": [
    {
      "route": "/profile",
      "methods": ["PUT", "POST", "DELETE"],
      "allowedRoles": ["authenticated"]
    }
  ]
}

In questo esempio tutti gli utenti possono accedere al metodo GET nella route /profile, ma solo gli utenti autenticati possono usare PUT, POST o DELETE.

Usare un carattere jolly

È possibile usare un carattere jolly alla fine della route per trovare la corrispondenza con tutte le route che seguono il criterio di base. Ad esempio, per limitare tutti gli URL che iniziano con /api agli utenti autenticati, scrivere:

{
  "routes": [
    {
      "route": "/api/*",
      "allowedRoles": ["authenticated"]
    }
  ]
}

Passaggi successivi

In seguito, implementeremo le restrizioni di accesso nell'app.