Autenticazione locale nel generatore di API dati
Quando si sviluppa una soluzione usando Generatore API dati in locale o quando si esegue Generatore API dati in locale, è necessario testare le opzioni di autenticazione e autorizzazione configurate simulando una richiesta con un ruolo o un'attestazione specifica.
Per simulare una richiesta autenticata senza configurare un provider di autenticazione , ad esempio Microsoft Entra ID, è possibile usare i Simulator
provider di autenticazione o StaticWebApps
:
Usare il Simulator
provider
Simulator
è un provider di autenticazione configurabile che indica al motore del generatore di API dati di trattare tutte le richieste come autenticate.
- Come minimo, tutte le richieste vengono valutate nel contesto del ruolo
Authenticated
di sistema . - Se lo si desidera, la richiesta viene valutata nel contesto di qualsiasi ruolo indicato nell'intestazione
X-MS-API-ROLE
Http.
Nota
Anche se il ruolo desiderato verrà rispettato, le autorizzazioni di autorizzazione che definiscono i criteri di database non funzioneranno perché le attestazioni personalizzate non possono essere impostate per l'utente autenticato con il Simulator
provider. Passare alla sezione Usare il provider per testare i StaticWebApps
criteri di autorizzazione del database.
1. Aggiornare il provider di autenticazione della configurazione di runtime
Assicurarsi che nel file di configurazione in uso sia specificato il provider di autenticazione e development
la Simulator
modalità. Fare riferimento a questa sezione di configurazione di esempio host
:
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. Specificare il contesto del ruolo della richiesta
Con Simulator
come provider di autenticazione di Generatore API dati, non è necessaria alcuna intestazione personalizzata per impostare il contesto del ruolo sul ruolo Authenticated
di sistema :
curl --request GET \
--url http://localhost:5000/api/books \
Per impostare il contesto del ruolo su qualsiasi altro ruolo, incluso il ruolo Anonymous
di sistema , l'intestazione X-MS-API-ROLE
deve essere inclusa nel ruolo desiderato:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
Usare il StaticWebApps
provider
Il StaticWebApps
provider di autenticazione indica al generatore di API dati di cercare un set di intestazioni HTTP presenti solo quando viene eseguito all'interno di un ambiente App Web statiche. Il client imposta queste intestazioni HTTP durante l'esecuzione in locale per simulare un utente autenticato, incluse eventuali appartenenze ai ruoli o attestazioni personalizzate.
Nota
Le istanze fornite dal client dell'intestazione Http, X-MS-CLIENT-PRINCIPAL
, funzioneranno solo durante lo sviluppo in locale perché gli ambienti di produzione App Web statiche di Azure rilasciano tutte le istanze del client fornite di tale intestazione.
Assicurarsi che nel file di configurazione che si sta usando il StaticWebApps
provider di autenticazione. Fare riferimento a questa sezione di configurazione di esempio host
:
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. Inviare richieste che forniscono un'intestazione generata X-MS-CLIENT-PRINCIPAL
Dopo aver eseguito il generatore di API dati in locale e configurato per l'uso del StaticWebApps
provider di autenticazione, è possibile generare manualmente un oggetto entità client usando il modello seguente:
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
I metadati utente autenticati dell'app Web statica hanno le proprietà seguenti:
Proprietà | Descrizione |
---|---|
identityProvider | Qualsiasi valore stringa. |
userId | Identificatore univoco per l'utente. |
userDetails | Nome utente o indirizzo di posta elettronica dell'utente. |
userRoles | Matrice dei ruoli assegnati dell'utente. |
Nota
Come indicato nella documentazione di App Web statiche, l'intestazione X-MS-CLIENT-PRINCIPAL
non contiene la claims
matrice.
Per essere passato con l'intestazione X-MS-CLIENT-PRINCIPAL
, il payload JSON deve essere codificato in Base64. A tale scopo, è possibile usare qualsiasi strumento online o offline. Uno di questi strumenti è DevToys. Payload con codifica Base64 di esempio che rappresenta il codice JSON a cui si fa riferimento in precedenza:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
La richiesta cURL seguente simula un utente autenticato che recupera l'elenco dei record di entità disponibili Book
nel contesto del author
ruolo:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'