2017-10-31 3 views
1

を保護しない:https://medium.com/@lugrugzo/asp-net-core-2-0-webapi-jwt-authentication-with-identity-mysql-3698eeba6ff8ネットコア2.0 - JWTベアラーは、私がネットコア2.0にIdentityでJWTを設定するためのチュートリアルを追ったルート

著者は明らかに、エンドポイントを保護するために、[承認]を追加する必要があると述べて けど[AllowAnonymous]を明示的に指定しない限り、すべてのエンドポイントを保護したい 私はJWTベアラーについて他のチュートリアルを読んで、彼らはまったく同じに見えるが、著者は、それは...デフォルトで

を許可を要求するべきであると言ってこれは私のStartup.cs

ある
// This method gets called by the runtime. Use this method to add services to the container. 
     public void ConfigureServices(IServiceCollection services) 
     { 
      // ===== Add DbContext ====== 
      var connectionString = Configuration.GetConnectionString("dbContext"); 
      services.AddEntityFrameworkNpgsql().AddDbContext<ApplicationDbContext>(options => options.UseNpgsql(connectionString)); 

     // ===== Add Identity ======== 
     services.AddIdentity<IdentityUser, IdentityRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders(); 

     // ===== Add JWT ===== 
     JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); // => remove default claims 
     services 
      .AddAuthentication(options => 
      { 
       options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
       options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; 
       options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 

      }) 
      .AddJwtBearer(cfg => 
      { 
       cfg.RequireHttpsMetadata = false; 
       cfg.SaveToken = true; 
       cfg.TokenValidationParameters = new TokenValidationParameters 
       { 
        ValidIssuer = Configuration.GetSection("jwt")["issuer"], 
        ValidAudience = Configuration.GetSection("jwt")["audience"], 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetSection("jwt")["key"])), 
        ClockSkew = TimeSpan.Zero // remove delay of token when expire 
       }; 
      }); 

     services.AddMvc(); 

     // Register the Swagger generator, defining one or more Swagger documents 
     services.AddSwaggerGen(c => 
     { 
      c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); 
     }); 

    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext dbContext) 
    { 
     if (env.IsDevelopment()) 
     { 

      app.UseDeveloperExceptionPage(); 
     } 


     // Enable middleware to serve generated Swagger as a JSON endpoint. 
     app.UseSwagger(); 

     // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint. 
     app.UseSwaggerUI(c => 
     { 
      c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); 
     }); 

     app.UseAuthentication(); 
     app.UseMvc(); 

     dbContext.Database.EnsureCreated(); 
    } 
} 

で何かを見つけることができません私が変更する必要があることを知っていると思います。 ヘッダーにトークンを入れずに任意のルートを呼び出すことができます。 アイデアはありますか?

+0

私が知っています。私は彼が間違って何かを書いたとは言わない、申し訳ありませんが私の質問はミスリーディングだった。デフォルトではすべてのルートを保護するように調整したいだけですが、[AllowAnnonymous]を使用してすべてのルートを開く代わりに[AllowAnnonymous]を使用して[承認] –

+0

Okを使用してください。 @ Mihailの答えはあなたが必要とするもののために十分であるはずです。 –

答えて

2

あなたは、このようなフィルタを使用することができるはずです。

using Microsoft.AspNetCore.Mvc.Authorization; 
using Microsoft.AspNetCore.Authorization; 
{...} 
services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
       .RequireAuthenticatedUser() 
       .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 
+1

ありがとう!明確に説明:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data –

関連する問題