دسته بندی ها
19:01 1399/04/25

نحوه ری دایرکت از http به https در Asp.net core

مشخصات سوال کننده :
کاربر : hamid_b     امتیاز کاربر : 518     رتبه کاربر : 4
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3216
هوش مصنوعی

پاسخ هوش مصنوعی

برای ری دایرکت از HTTP به HTTPS در ASP.NET Core، می توانید از Middleware استفاده کنید. با استفاده از روش زیر، می توانید اطمینان حاصل کنید که تمامی درخواست ها به HTTPS هدایت می شوند.

ابتدا در فایل Startup.cs، متد Configure را به روز کنید:


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection(); // این خط را اضافه کنید
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

همچنین برای ری دایرکت www به non-www یا بالعکس، می توانید از یک Middleware سفارشی استفاده کنید:


public class RedirectToHttpsMiddleware
{
    private readonly RequestDelegate _next;

    public RedirectToHttpsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (!context.Request.IsHttps)
        {
            var redirectUrl = "https://" + context.Request.Host + context.Request.Path + context.Request.QueryString;
            context.Response.Redirect(redirectUrl, true);
            return;
        }

        await _next(context);
    }
}

سپس این Middleware را در متد Configure قبل از app.UseRouting() اضافه کنید:


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ...
    
    app.UseMiddleware(); // این خط را اضافه کنید

    // ...
}

با استفاده از این تنظیمات، تمامی درخواست ها که به HTTP می آیند، به HTTPS هدایت می شوند و همچنین می توانید تنظیمات دیگری برای ری دایرکت www و non-www انجام دهید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mohammad-i 12:52 1399/04/28

میتونید از Middleware

app.UseHttpsRedirection();

استفاده کنید. روش دوم هم استفاده از Rewriting Middleware هست.

آموزش در سایت مایکروسافت

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
پاسخ دهنده : saedbfd 18:21 1399/04/28

نحوه ری دایرکت از http به https در Asp.net core

همونطوری که در متن سوال هم گفتید موضوع ری دایرکت از http به https اهمیت زیادی داره. از مهم ترین مواردی که برای این کار میشه ذکر کرد اینه که اگر اطلاعاتی که بین سایت شما و کاربر سایت شما از اهمیت بالایی برخوردار باشه مثل درگاههای بانکی یا اطلاعات سایتهایی مثل ثبت احوال و ... شخصی بتونه در این بین این اطلاعات رو شنود کنه عملا اطلاعات سایت و اطلاعات کاربران شما لو میره.

بنابراین لازم هست حتما این ری دایرکت از http به https انجام بشه تا اطلاعات انتقالی از سایت به کلاینت با امنیت بالاتری انجام بشه.

 

نحوه فعالسازی https

  1. جهت فعالسازی https ابتدا شما باید از یک شرکت معتبر گواهینامه ssl خریداری کنید و سپس روی هاست و سرور خودتون فعالسازی و نصب کنید.
  2. در مرحله بعدی باید ssl رو تنظیم یا اصطلاحا کانفیگ کنید.
  3. و در نهایت یک فایل بک آپ تهیه کنید تا در صورت بروز مشکل برای ssl سریع جایگزین کنید.

معمولا موارد بالا توسط خود شرکت هاست یا شرکتی که گواهینامه ssl از آن خریداری کرده اید انجام می شود.

 

ری دایرکت از http به https در کنترل پنل plesk یا cpanel

اما موضوع مهم بعدی بحث ری دایرکت از http به https می باشد. یعنی اگر کاربر شما هر کدام از Url های زیر را وارد کرد به Url شامل https هدایت شود

 

//اشتباه
www.mysite.ir
http://mysite.ir
http://www.mysite.ir

//صحیح
https://mysite.ir

 

دقت کنید که وظیفه اصلی ری دایرکت از http به https بر عهده خود هاست می باشد و معمولا شرکت های ارائه دهنده خدمات هاستینگ و گواهینامه ssl با انجام تنظیمات این کار را انجام می دهند و معمولا نیازی نیست برنامه نویس کاری انجام دهد.

 

اما با این حال ممکن است برخی از شرکت های ارائه دهنده هاست این کار را انجام ندهند و برنامه نویس می بایست عملیات ری دایرکت از http به https را انجام دهد.

 

ری دایرکت از http به https در asp.net core

 

نحوه ری دایرکت از http به https در Asp.net core

برای اینکه شما بتوانید به عنوان یک برنامه نویس از http به https ری دایرکت انجام دهید موقع ایجاد پروژه باید تیک configure for https را بزنید تا تنظیمات مربوط به https در پروژه شما ایجاد شود.

 

redirect from http to https

 

در حال حاضر فایل appsetting.json شما باید چیزی مشابه با زیر باشد:

 

{
  "ConnectionStrings": {
    "MyConnectionString": "Data Source=.;Initial Catalog=DataBasename;user Id=sa;Password=1"
  },

  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

 

خب حالا در کلاس startup.cs و در متد ConfigureServices دستور زی را در انتهای متد اضافه کنید

var optRewrite = new RewriteOptions().AddRedirectToHttpsPermanent();

 

اکنون به متد Configure بیابید و دستورات زیر را اضافه کنید :

 

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }
            //
            app.UseHttpsRedirection();
            app.Use(async (context, next) =>
            {
                string sHost = context.Request.Host.HasValue == true ? context.Request.Host.Value : "";  //domain without :80 port .ToString();
                sHost = sHost.ToLower();
                string sPath = context.Request.Path.HasValue == true ? context.Request.Path.Value : "";
                string sQuerystring = context.Request.QueryString.HasValue == true ? context.Request.QueryString.Value : "";

                if (!context.Request.IsHttps)
                {
                    string new_https_Url = "https://" + sHost;
                    if (sPath != "")
                    {
                        new_https_Url = new_https_Url + sPath;
                    }
                    if (sQuerystring != "")
                    {
                        new_https_Url = new_https_Url + sQuerystring;
                    }
                    context.Response.Redirect(new_https_Url);
                    return;
                }
                if (sHost.IndexOf("www.") == 0)
                {
                    string new_Url_without_www = "https://" + sHost.Replace("www.", "");
                    if (sPath != "")
                    {
                        new_Url_without_www = new_Url_without_www + sPath;
                    }
                    if (sQuerystring != "")
                    {
                        new_Url_without_www = new_Url_without_www + sQuerystring;
                    }
                    context.Response.Redirect(new_Url_without_www);
                    return;
                }
                await next();
            });

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

 

 

در کدهای بالا همه حالات خطا که در بالا گفته شد بررسی شده و در صورتی که هر کدام از Url های اشتباه وارد شود به Url صحیح که با https شروع می شود تبدیل می شود.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود