2017-08-25 26 views
0

我试图在本地化的URL中使用基于cookie的MVC 2.0身份验证。在“配置”功能,我使用的是:MVC Core 2.0 Cookie身份验证LoginPath选项

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

一切都将被罚款,但我使用本地化的网址,如:

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

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

谢谢。

+0

你能对由非本地化的URL路径造成的问题更大呢?另外,您是否尝试过在AccessDeniedPath/LoginPath字段中使用路由令牌 - 例如“{culture}/Auth/Forbidden”? –

回答

0

Action<CookieAuthenticationOptions>具有提供给它,包括Cookie即在(CookieBuilder)的被构造的过程和CookieManager[PathString] LoginPath[PathString] AccessDeniedPath性质。

我不确定是否绝对有必要,但我相当有信心可以将处理程序附加到一个或多个CookieAuthenticationOptions.Events,该处理程序使用提供的RedirectContext传递给处理程序来相应地重写cookie的路径属性。 See ref - CookieAuthenticationHandler来检查如何使用路径字符串的详细信息。特别是,您可能会看到CookieAuthenticationEvents:RedirectToAccessDeniedCookieAuthenticationEvents:RedirectToLogin

这就是说,我首先要验证你是否不想通过已经内置的东西获得你想要的东西。假设您的设置是一样的东西

services.AddMvc(options => { options.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline))); });

我倒觉得RouteDataRequestCultureProvider将处理附加的文化到最终被发布了/Auth/Forbidden URL,暗示有可能会在如何组件的地方是一个更优化的解决方案正在被配置而不是在路径的自定义重写中。

一些额外的引用:

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