2017-01-11 13 views
5

Я разрабатываю веб-приложение MVC5. Это приложение имеет 2 области: «SU» и «App». Каждая область должна быть аутентифицирована независимо. Каждая область также имеет свои собственные страницы входа.
Я использую OWIN для аутентификации пользователей.
Теперь проблема в том, что я не могу установить owin CookieAuthenticationOptionsLoginPath в зависимости от области, которую запрашивает пользователь.
Например, если запрос пользователя http://example.com/su/reports/dashboard, я должен быть в состоянии перенаправить их на http://example.com/su/auth/login
Кроме того, для области «App», если запрос пользователя http://example.com/app/history/dashboard, я должен быть в состоянии перенаправить их на http://example.com/app/auth/loginПроверка подлинности на основе области с использованием OWIN

Я хотел бы чтобы избежать пользовательского атрибута и, следовательно, попытались следующим кодом, но он всегда перенаправляется на путь корневого входа т.е. http://example.com/auth/login

public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var url = HttpContext.Current.Request.Url.AbsoluteUri; 
      string loginPath = "/auth/login"; 
      string areaName = string.Empty; 
      if (url.ToLower().Contains("/su/")) 
      { 
       areaName = "SU"; 
       loginPath = "/su/auth/login"; 
      } 
      if (url.ToLower().Contains("/app/")) 
      { 
       areaName = "APP"; 
       loginPath = "/app/auth/login"; 
      } 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = "ApplicationCookie" + areaName, 
       LoginPath = new PathString(loginPath) 
      }); 
     } 
} 

Следую ли я за правильный подход, или есть ли другой способ достичь того же? Благодаря!

ответ

2

CookieAuthenticationOptions.LoginPath Недвижимость устанавливается один раз при запуске. Чтобы использовать разные URL-адреса по запросу, вы можете использовать либо произвольную реализацию ICookieAuthenticationProvider, установленную через CookieAuthenticationOptions.Provider, либо просто установить свое настраиваемое действие для OnApplyRedirect со встроенным CookieAuthenticationProvider. Второй вариант проще и кажется достаточным для вашего дела.

Вот пример кода:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "ApplicationCookie", 
    LoginPath = new PathString("/auth/login"), 
    Provider = new CookieAuthenticationProvider { OnApplyRedirect = OnApplyRedirect } 
}); 

public static void OnApplyRedirect(CookieApplyRedirectContext context) 
{ 
    var url = HttpContext.Current.Request.Url.AbsoluteUri; 

    string redirectUrl = "/auth/login"; 
    if (url.ToLower().Contains("/su/")) 
    { 
     redirectUrl = "/su/auth/login"; 
    } 
    else if (url.ToLower().Contains("/app/")) 
    { 
     redirectUrl = "/app/auth/login"; 
    } 

    context.Response.Redirect(redirectUrl); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^