MVC Core 2.0 Cookie身份验证LoginPath选项

时间:2017-08-25 15:37:36

标签: asp.net-mvc cookies asp.net-core asp.net-core-mvc

我正在尝试在MVC 2.0中使用基于cookie的身份验证和本地化的URL。在我正在使用的“配置”功能中:

services.AddAuthentication("MyScheme")
            .AddCookie("MyScheme", options =>
                                   {
                                       options.AccessDeniedPath = "/Auth/Forbidden/";
                                       options.LoginPath = "/Auth/SignIn/";
                                   });

一切都会好的,但我使用的本地化网址如下:

template: "{culture}/{controller=Home}/{action=Index}/{id?}"

是否有可能以某种方式在上面的选项中指定sime模式以适应本地化URL(如/ en / Auth / SignIn /或其他语言)?现在它是强大的设置,这会导致问题。

谢谢。

1 个答案:

答案 0 :(得分:1)

Action<CookieAuthenticationOptions>可以使用[PathString] LoginPath[PathString] AccessDeniedPath属性,包括正在构建的Cookie(CookieBuilder)和{{1} }}。

我不确定这是否绝对必要,但我相信您可以将处理程序附加到一个或多个CookieManager,使用提供的CookieAuthenticationOptions.Events相应地重写cookie的路径属性传递给处理程序。 See ref - CookieAuthenticationHandler检查路径字符串的使用细节。特别是,您可以查看RedirectContextCookieAuthenticationEvents:RedirectToAccessDenied

那就是说,我首先想验证你是不是错过了通过已经内置的方式获得你想要的东西的方法。假设您的设置类似于

CookieAuthenticationEvents:RedirectToLogin

我认为services.AddMvc(options => { options.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline))); });会处理将文化附加到最终发布的RouteDataRequestCultureProvider网址,暗示在组件的配置方式中可能存在更优化的解决方案而不是自定义重写路径。

其他一些参考资料:

https://andrewlock.net/url-culture-provider-using-middleware-as-mvc-filter-in-asp-net-core-1-1-0/

https://github.com/aspnet/Security/blob/488eb44467eb677eab62bdc49aa6255cc1be3119/src/Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationOptions.cs