Startup.cs安全措施

时间:2017-11-15 15:52:36

标签: c# web-hosting asp.net-core-2.0

我想知道我是不是 (a)从事良好的编码工作,
(b)无害地重复自己,或者 (c)增加效率低下的冗余

例如:
1)在Configure()中,我可以添加RewriteOptions().AddRedirectToHttps();
2)在ConfigureServices()中我可以添加  services.Configure<MvcOptions>(options => { options.Filters.Add(new RequireHttpsAttribute()); });

另一个例子:
1)在Configure()中,我可以添加app.UseAuthentication();
2)在ConfigureServices()中,我可以将.RequireAuthenticatedUser()添加到我的AddMvc()电话。

在两个示例中似乎我只能通过一次调用就可以逃脱。我是否自由而且清楚只能打一个电话?如果是这样,哪一个更好保留?

我已经搜索了一下,我可以看到所有这些方法都在使用,但是我没有找到比较这些调用的相对优点的资源,更不用说表明使用它的好坏方法了他们在一起。

1 个答案:

答案 0 :(得分:1)

举个例子:

  

1)在Configure()我可以添加RewriteOptions().AddRedirectToHttps();

     

2)在ConfigureServices()我可以添加services.Configure<MvcOptions>(options => { options.Filters.Add(new RequireHttpsAttribute()); });

这两者基本上都是一样的 - 它们会将HTTP请求重定向到HTTPS。不同之处在于它们应用于哪些请求。

如果您使用重写器中间件,所有进入中间件的请求都将被重定向到HTTPS。

public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles(); // Requests handled by this middleware won't be redirected to HTTPS

    var options = new RewriteOptions()
       .AddRedirectToHttps();

    app.UseRewriter(options); // All requests that make it this far will be redirected from HTTP to HTTPS

    app.UseMvc(); // Requests guaranteed to be HTTPS
}

在第二种情况下,您使用全局过滤器来应用RequireHttpsAttribute,只有发送到MvcMiddleware的请求才会被重定向到HTTPS。

就最佳实践而言,我建议使用重写器中间件 - 您可以将其添加到中间件管道的开头,然后所有请求都需要HTTPS,而不仅仅是进入MVC的请求中间件。

在你的第二个例子中,这两种方法实际上做了不同的事情:

  • app.UseAuthentication() - 对请求进行身份验证,并通过以下方式设置与请求关联的User反序列化存储在cookie中的用户主体
  • RequireAuthenticatedUser() - 要求用户在调用控制器上的操作方法之前已登录。如果用户尚未登录,则会将其重定向到登录页面。在这种情况下,您必须在app.UseAuthentication()之前致电app.UseMvc(),否则即使您已登录,也不会设置请求的User,并且您将被重定向到登录页面。