Startup.cs 安全措施
Startup.cs security measures
我想知道我是不是
(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) In Configure()
I can add RewriteOptions().AddRedirectToHttps()
;
2) In ConfigureServices()
I can add 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.UseMvc()
之前调用app.UseAuthentication()
,否则即使您已经登录,请求的User
也不会被设置,您将被重定向到登录页面。
我想知道我是不是
(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) In
Configure()
I can addRewriteOptions().AddRedirectToHttps()
;2) In
ConfigureServices()
I can addservices.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.UseMvc()
之前调用app.UseAuthentication()
,否则即使您已经登录,请求的User
也不会被设置,您将被重定向到登录页面。