1

私は自分のホストにSSL証明書をインストールしましたが、httpトラフィックをすべてhttpsにリダイレクトすると考えました。私は、.netコアでそれを手助けするための新しいパッケージがあることを発見しました。asp.net core httpトラフィックをhttpsにリダイレクトする

問題は、私にとってはうまくいかず、理由が分からないということです。私はリダイレクトをテストするためにhttp://mysite.co.ukに移動しようとすると、ページが正しくリダイレ​​クトされていない Firefoxはサーバが決して方法で、このアドレスに対する要求をリダイレクトしていることを検出しました

をというメッセージで失敗しますコンプリート。 この問題は、Cookieの無効化または拒否によって発生することがあります。ここで

私stratup.csです:私は設定するには、追加

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 
using Microsoft.EntityFrameworkCore; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.Logging; 
using Playabout.Data; 
using Playabout.Models; 
using Playabout.Services; 
using Microsoft.AspNetCore.Identity; 
using System.Security.Claims; 
using Microsoft.AspNetCore.Localization; 
using Microsoft.Net.Http.Headers; 
using System.Globalization; 
using Sakura.AspNetCore.Mvc; 
using Microsoft.AspNetCore.ResponseCompression; 
using System.IO.Compression; 
using System.Linq; 
using Microsoft.AspNetCore.Rewrite; 
using System.Net; 

namespace Playabout 
{ 
public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: false,  reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json",  optional: true); 

     if (env.IsDevelopment()) 
     { 
      // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 
      //builder.AddUserSecrets<Startup>(); 
     } 

     builder.AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

    public IConfigurationRoot Configuration { get; } 

    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

     services.AddIdentity<ApplicationUser, IdentityRole>(
      config => 
      { 
       config.SignIn.RequireConfirmedEmail = true; 
      }) 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders(); 

     services.Configure<GzipCompressionProviderOptions> 
      (options => options.Level = CompressionLevel.Optimal); 
      services.AddResponseCompression(options => 
      { 
       options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] 
       { 
        "text/plain", 
        "text/css", 
        "application/javascript", 
        "text/html", 
        "application/xml", 
        "text/xml", 
        "application/json", 
        "text/json", 
        // Custom 
        "text/javascript", 
        "image/svg+xml" 
       }); 
       options.Providers.Add<GzipCompressionProvider>(); 
      }); 

     services.AddMvc(); 


     // Add application services. 
     services.Configure<SmtpConfig>(optionsSetup => 
     { 
      //get from config.json file 
      optionsSetup.EmailDisplayName = Configuration["SMTP:DisplayName"]; 
      optionsSetup.SmtpPassworrd = Configuration["SMTP:Password"]; 
      optionsSetup.SmtpUserEmail = Configuration["SMTP:Email"]; 
      optionsSetup.SmtpHost = Configuration["SMTP:Host"]; 
      optionsSetup.SmtpPort = Convert.ToInt32(Configuration["SMTP:Port"]); 
     }); 
     services.Configure<RecaptchaConfig>(optionsSetup => 
     { 
      //get from config.json file 
      optionsSetup.RecaptchaPublicKey = Configuration["Recaptcha:PublicKey"]; 
      optionsSetup.RecaptchaPrivateKey = Configuration["Recaptcha:PrivateKey"]; 
     }); 
     // Add default bootstrap-styled pager implementation 
     services.AddBootstrapPagerGenerator(options => 
     { 
      // Use default pager options. 
      options.ConfigureDefault(); 
     }); 
     services.AddTransient<IEmailSender, AuthMessageSender>(); 
     services.AddTransient<ISmsSender, AuthMessageSender>(); 
     services.AddSession(); 
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public async void Configure(IApplicationBuilder app, IHostingEnvironment env, 
     ILoggerFactory loggerFactory, IServiceProvider serviceProvider, ApplicationDbContext context) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
      app.UseBrowserLink(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error"); 
     } 
     var supportedCultures = new[] 
     { 
      new CultureInfo("en-GB"), 

     }; 
     app.UseRequestLocalization(new RequestLocalizationOptions 
     { 
      DefaultRequestCulture = new RequestCulture("en-GB"), 
      SupportedCultures = supportedCultures, 
      SupportedUICultures = supportedCultures 
     }); 
     app.UseRewriter(new RewriteOptions() 
      .AddRedirectToHttps()); 
     app.UseResponseCompression(); 
     app.UseStaticFiles(new StaticFileOptions 
     { 
      OnPrepareResponse = ctx => 
      { 
       const int durationInSeconds = 60 * 60 * 730; 
       ctx.Context.Response.Headers[HeaderNames.CacheControl] = 
        "public,max-age=" + durationInSeconds; 
      } 
     }); 

     app.UseSession(); 
     app.UseIdentity(); 

     // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715 
     app.UseFacebookAuthentication(new FacebookOptions() 
     { 
      AppId = Configuration["Authentication:Facebook:AppId"], 
      AppSecret = Configuration["Authentication:Facebook:AppSecret"] 
     }); 
     app.UseGoogleAuthentication(new GoogleOptions() 
     { 
      ClientId = Configuration["Authentication:Google:ClientId"], 
      ClientSecret = Configuration["Authentication:Google:ClientSecret"] 
     }); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 

     try 
     { 
      await CreateRoles(context, serviceProvider); 
     } 
     catch (Exception) 
     { } 
    } 
    private async Task CreateRoles(ApplicationDbContext context, IServiceProvider serviceProvider) 
    { 
     var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>(); 
     var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); 
     // Create a list of roles with both name and normalised name attributes 
     List<IdentityRole> roles = new List<IdentityRole> 
     { 
      new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" }, 
      new IdentityRole { Name = "Member", NormalizedName = "MEMBER" }, 
      new IdentityRole { Name = "Moderator", NormalizedName = "MODERATOR" } 
     }; 
     // Check if the role already exists 
     foreach (var role in roles) 
     { 
      var roleExist = await RoleManager.RoleExistsAsync(role.Name); 
      if (!roleExist) 
      { // Add it if it doesn't 
       context.Roles.Add(role); 
       context.SaveChanges(); 
      } 
     } 
     var user = await userManager.FindByEmailAsync("[email protected]"); 
     if (user != null) 
     { 
      var gotRoles = userManager.GetRolesAsync(user); 
      if (!gotRoles.Equals("Admin")) 
      { 
       await userManager.AddToRoleAsync(user, "Admin"); 
      } 
     } 
     else if (user == null) 
     { 
      var nuser = new ApplicationUser 
      { 
       FirstName = Configuration["AppSettings:Admin:FirstName"], 
       LastName = Configuration["AppSettings:Admin:LastName"], 
       PhoneNumber = Configuration["AppSettings:Admin:PhoneNumber"], 
       UserName = Configuration["AppSettings:Admin:UserName"], 
       Email = Configuration["AppSettings:Admin:Email"], 
       JoinDate = DateTime.Now, 
       EmailConfirmed = true, 
       PhoneNumberConfirmed = true 
      }; 
      var result = await userManager.CreateAsync(nuser, Configuration["AppSettings:Admin:Password"]); 
      if (result.Succeeded) 
      { 
       await userManager.AddClaimAsync(nuser, new Claim("GivenName", nuser.FirstName)); 
       await userManager.AddClaimAsync(nuser, new Claim("Surname", nuser.LastName)); 
       await userManager.AddToRoleAsync(nuser, "Admin"); 
      } 
     } 
    } 
} 
} 

抜粋です:Microsoft.AspNetCore.Rewriteを使用しています

 app.UseRewriter(new RewriteOptions() 
     .AddRedirectToHttps()); 

私はちょうど検査のためにクロムを使いましたが、リダイレクトが繰り返され、 "ERR_TOO_MANY_REDIRECTS"が原因で失敗して何かがループを起こしています。

リクエストが既に「https」であるかどうかを確認する方法はありますか、それとも別の方法がありますか?

答えて

0

私は次のように同様の問題を解決することができた:

if (env.IsProduction()) 
{ 
    app.UseRewriter(new RewriteOptions().AddRedirectToHttpsPermanent()); 
} 
+0

私はそこに希望を持っています:)しかし、悲しいことに、それでも同じエラーがあります。それはリダイレクトです。これは私が想定しているものですが、どこかで見つからないものがあります。 –

0

スニペットの様々な試みて、[RequireHttps]属性を追加し、これを整理しようとして一日を過ごした後、私は問題をグーグルで見つけヘッダーを渡そうとしていました...結局私は早く試したことがあったようでした。私は、サーバー上にあるweb.configファイルを編集した追加(Iは、公開どのように行うのか分からない)、次

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions logicalGrouping="MatchAny"> 
       <add input="{SERVER_PORT_SECURE}" pattern="^0$" /> 
      </conditions> 
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 

はここのコメントから撮影: https://github.com/aspnet/KestrelHttpServer/issues/916

から何をI Kestrelとの関係を読んだことがありますが、私はそれが何であるか完全にはわかりません:Dしかしそれはうまくいきます!明日は毎回これをどうやってやっていくかを考えてみるつもりです。

関連する問題