Authentification locale dans le générateur d’API de données
Lors du développement d’une solution à l’aide du générateur d’API de données localement ou lors de l’exécution locale du générateur d’API de données, vous devez tester les options d’authentification et d’autorisation configurées en simulant une demande avec un rôle ou une revendication spécifique.
Pour simuler une demande authentifiée sans configurer de fournisseur d’authentification (comme Microsoft Entra ID, par exemple), vous pouvez utiliser les Simulator
fournisseurs d’authentification ou StaticWebApps
:
Utiliser le Simulator
fournisseur
Simulator
est un fournisseur d’authentification configurable qui indique au moteur du générateur d’API de données de traiter toutes les requêtes comme authentifiées.
- Au minimum, toutes les demandes sont évaluées dans le contexte du rôle
Authenticated
système . - Si vous le souhaitez, la demande est évaluée dans le contexte de n’importe quel rôle indiqué dans l’en-tête
X-MS-API-ROLE
Http.
Notes
Bien que le rôle souhaité soit respecté, les autorisations d’autorisation définissant des stratégies de base de données ne fonctionnent pas, car les revendications personnalisées ne peuvent pas être définies pour l’utilisateur authentifié auprès du Simulator
fournisseur. Passez à la section Utiliser le fournisseur pour tester les StaticWebApps
stratégies d’autorisation de base de données.
1. Mettre à jour le fournisseur d’authentification de configuration du runtime
Vérifiez que dans le fichier de configuration, vous utilisez le fournisseur d’authentification et development
le Simulator
mode est spécifié. Reportez-vous à cet exemple de host
section de configuration :
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. Spécifier le contexte de rôle de la demande
Avec Simulator
comme fournisseur d’authentification du générateur d’API de données, aucun en-tête personnalisé n’est nécessaire pour définir le contexte de rôle sur le rôle Authenticated
système :
curl --request GET \
--url http://localhost:5000/api/books \
Pour définir le contexte de rôle sur n’importe quel autre rôle, y compris le rôle Anonymous
système , l’en-tête X-MS-API-ROLE
doit être inclus avec le rôle souhaité :
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
Utiliser le StaticWebApps
fournisseur
Le StaticWebApps
fournisseur d’authentification demande au générateur d’API de données de rechercher un ensemble d’en-têtes HTTP uniquement présents lors de l’exécution dans un environnement Static Web Apps. Le client définit ces en-têtes HTTP lors de l’exécution locale pour simuler un utilisateur authentifié, y compris l’appartenance à un rôle ou les revendications personnalisées.
Notes
Les instances fournies par le client de l’en-tête Http, X-MS-CLIENT-PRINCIPAL
, fonctionnent uniquement lors du développement local, car les environnements de production Azure Static Web Apps suppriment toutes les instances fournies par le client de cet en-tête.
Assurez-vous que dans le fichier de configuration, vous utilisez le fournisseur d’authentification StaticWebApps
. Reportez-vous à cet exemple de host
section de configuration :
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. Envoyer des requêtes fournissant un en-tête généré X-MS-CLIENT-PRINCIPAL
Une fois le générateur d’API de données exécuté localement et configuré pour utiliser le StaticWebApps
fournisseur d’authentification, vous pouvez générer manuellement un objet principal client à l’aide du modèle suivant :
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
Les métadonnées utilisateur authentifiées de Static Web App ont les propriétés suivantes :
Propriété | Description |
---|---|
IdentityProvider | Toute valeur de chaîne. |
userId | Identificateur unique de l’utilisateur. |
userDetails | Nom d’utilisateur ou adresse e-mail de l’utilisateur. |
userRoles | Tableau des rôles affectés à l’utilisateur. |
Notes
Comme indiqué dans Static Web Apps documentation, l’en-tête X-MS-CLIENT-PRINCIPAL
ne contient pas le claims
tableau.
Pour être transmise avec l’en-tête X-MS-CLIENT-PRINCIPAL
, la charge utile JSON doit être encodée en Base64. Pour ce faire, vous pouvez utiliser n’importe quel outil en ligne ou hors connexion. L’un de ces outils est DevToys. Exemple de charge utile encodée en Base64 qui représente le JSON précédemment référencé :
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
La requête cURL suivante simule un utilisateur authentifié qui récupère la liste des enregistrements d’entité disponibles Book
dans le contexte du author
rôle :
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'