web-dev-qa-db-fra.com

Blazor: iservicecollection ne contient pas de définition pour AddDeFaulidentity

après cela tutoriel J'ai rencontré un problème dans le fichier startup.cs:

(besoin de faire défiler un peu, désolé)

le problème est avec l'identité par défaut, obtenant l'erreur suivante:

"IServicecollection ne contient pas de définition pour ADDDEfaulidentity et aucune méthode d'extension accessible AddDefaulidentity acceptant un premier argument de type" iservicecollection pourrait être trouvé (utilisez-vous une directive ou une référence d'assemblage?) "

J'ai regardé les yeux documentation , mais je manque de quelle erreur je fais, j'ai vu un tas de cas similaires à ceux de la mienne, mais leur solution (incluse) ne semble pas fonctionner. Je peux nous aider, merci d'avance.

"Mon" code est [~ # ~] ici [~ # ~ ~] Si vous voulez jeter un coup d'oeil

6

Vous ne devriez pas ajouter d'identité si vous utilisez une autocollante JWT ... Remarque: AddDefaulidentity Extension Method est utilisée pour ajouter le service d'interface utilisateur par défaut pour les pages de rasoir et MVC. Et cela vous oblige également à ajouter des statiques.

Notez également le code supplémentaire et son arrangement dans la méthode de configuration

Essayez ceci dans votre classe de démarrage:

 public class Startup
{
    //add
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }


    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.Microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().AddNewtonsoftJson();

        services.AddTransient<IJwtTokenService, JwtTokenService>();


        //Setting up Jwt Authentication
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = Configuration["Jwt:Issuer"],
                    ValidAudience = Configuration["Jwt:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });


        services.AddResponseCompression(opts =>
        {
            opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "application/octet-stream" });
        });
    }

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseResponseCompression();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBlazorDebugging();
            }

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(routes =>
     {
         routes.MapDefaultControllerRoute();
     });

    app.UseBlazor<Client.Startup>();
        }
    }

}

J'espère que cela t'aides...

Mise à jour 1: * Mettez à jour votre classe de démarrage avec le code ci-dessus * Annotez votre contrôleur SampleDataController comme celui-ci:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] 
[Route("api/[controller]")]
    public class SampleDataController : Controller
    {
    // ..
    }
  • Exécutez votre candidature, puis publiez une demande HTTP Obtenir dans Postman ou Fiddler pour l'URL:

aPI/SAMPLEDATA/WeatherEforecss

La réponse doit contenir le jwtTokoken créé

Résumé du flux d'exécution: publication d'une demande d'accès à votre API Web. La demande au point de route Weatherecasts est redirigée vers le contrôleur de jeton dont le but est de créer un jeton JWT et de le renvoyer à l'appelant. Notez que ce contrôleur ne vérifie pas l'identité de l'utilisateur au nom de laquelle cette demande a été envoyée ...

FAIRE:

  • Créez un service pour stocker le jeton JWT: Ce service peut utiliser des extensions Blazor pour localStorage et SessionStorage pour stocker et récupérer des jetons JWT. Ce service peut contenir des méthodes telles que IsautChip, GetToken, etc.

Remarque: vous pouvez transmettre le jeton JWT du serveur à Blazor avec plus de détails sur l'utilisateur en tant que cookie.

  • Créez un composant de connexion pour vous connecter à l'utilisateur, s'il n'est pas déjà connecté et essaie d'accéder à une ressource sécurisée.

Remarque: Si l'utilisateur est déjà authentifié, il n'est pas redirigé vers le formulaire de connexion. Au lieu de cela, nous émettons une demande HTTP au serveur, afin de récupérer les ressources nécessaires à la blazor, si c'est le cas.

Remarque: Comment savons-nous si notre utilisateur est authentifié? Nous interrogeons notre méthode isautentialisée. Si l'utilisateur est authentifié, si vous récupérez le jeton JWT et l'ajoutez à la collection des en-têtes passée avec notre appel httpClient.

Plus à venir...

Est-ce que tu le vois ?

2
enet