web-dev-qa-db-fra.com

Magasin de comptes d'utilisateurs locaux pour l'API Web dans ASP.NET Core 2.0

J'utilise ASP.Net Core 2.0, je souhaite créer un projet d'API Web avec le type d'autorisation Comptes d'utilisateurs individuels, mais la seule option est Connect to an existing user store in the cloud.  Create new project screenshot

Comment ajouter un modèle pour l'API Web avec des comptes d'utilisateurs individuels avec Store user accounts in-app?

Cette option est disponible pour les applications Web, mais pas pour les API Web.

23
Kahbazi

Essayez de démarrer votre projet dans la console avec la commande 

dotnet new webapi -au Individual

Vous pouvez ensuite ouvrir votre projet dans VS. (pour contourner le dialogue). Ensuite, vous pouvez utiliser par exemple l'attribut authorize. Mais le projet est toujours configuré pour utiliser l'authentification Azure Bearer . Vous devez décider d'où obtenir l'identité. Vous pouvez prendre identityserver4 ou créer votre propre "Fournisseur de stockage personnalisé pour l’identité ASP.NET Core" ( MS-Docs )

La différence avec MVC WebApp: vous avez ici un contrôleur de compte avec des vues pour gérer les inscriptions et obtenir un nom d'utilisateur et un mot de passe, etc.

13
Kirsten

J'étais perplexe devant la même chose et j'ai fini par sélectionner Web Application au lieu de Web API. Il y a probablement une logique dans MS qui supprime les "comptes in-app" - Avec l'API Web, vous écrivez probablement SPA et les "vues" (connexion, mot de passe oublié, etc.) doivent être dans votre code client; pas de vues rasoirs sur le serveur.

Notez que si vous utilisez IdentityServer 4, les vues sont générées dans l'application IS4. not dans l'application Business API.

Je pense donc que Microsoft essaie de vous donner un indice ici ...

3
Felix

Pour obtenir la réponse, j'ai construit à la fois la version de l'API sans authentification et la version avec, puis j'ai effectué un diff sur les dossiers générés (et ignoré le bloc de code supplémentaire dans appsettings.json qui apparaît lorsque vous utilisez l'option cloud-auth).

Il s'avère que l'activation de l'authentification ne nécessite que quelques lignes de code.

Si vous apportez les modifications suivantes à une version sans authentification du modèle d'API, vous aurez une version d'authentification:

Dans Startup.cs , ajoutez: using Microsoft.AspNetCore.Authentication; dans la section "using". Ajoutez également: app.UseAuthentication(); juste avant app.UseMvc(); comme indiqué ci-dessous:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseAuthentication();
    app.UseMvc();
}

Dans Controllers\ValuesController.cs , ajoutez: using Microsoft.AspNetCore.Authorization; dans la section "using". Ajoutez également: [Authorize] immédiatement au-dessus de [Route("api/[controller]")]

C'est tout ce dont vous avez besoin pour ajouter une authentification basée sur un modèle au modèle d'API Vanilla. Bien sûr, vous aurez besoin d'ajouter le code d'authentification réel, mais au niveau du modèle, vous avez terminé.

(Remarque: vous utiliserez également UserSecretsId dans la version d’authentification. Si vous le souhaitez, cliquez simplement sur la solution et sélectionnez Gérer les secrets de l’utilisateur.)

0
Clearhat