2016-08-29 48 views
1

我使用CookieAuthenticationOptions在我的.NET Core應用程序中配置身份驗證,但我的登錄頁面位於不同的域。但是,LoginPath屬性只允許內部路徑,而不是完整的URI。所以下面的代碼:ASP.NET核心CookieAuthenticationOptions.LoginPath在不同的域

var cookieOptions = new CookieAuthenticationOptions() 
{ 
    AuthenticationScheme = "Cookies", 
    LoginPath = new PathString("https://externaldomain.com/login"), 
    CookieName = string.Format("myCookie"), 
}; 

app.UseCookieAuthentication(cookieOptions); 

...無效。這應該是相當簡單的,或者我在這裏錯過了什麼?我討厭在我的應用程序內部處理這個問題,並自己進行實際的重定向。這將是有點跛腳。

+1

作爲變通方法,您可以創建本地頁/控制器,它重定向到你的外部鏈接 – Kalten

+0

嗯,是的,但正如我在我的問題說:「我討厭在內部處理這在我的應用程序中,並自己做實際的重定向。「似乎很奇怪必須自己做這個。 – Razzie

+0

@Razzie只是我想知道你怎麼能通過另一個域設置Cookie? –

回答

2

使用OnRedirectToLogin

var cookieOptions = new CookieAuthenticationOptions() 
{ 
    AuthenticationScheme = "Cookies", 
    CookieName = string.Format("myCookie"), 
    Events = new CookieAuthenticationEvents() 
    { 
      OnRedirectToLogin = async (context) => 
      { 
       context.HttpContext.Response.Redirect("https://externaldomain.com/login"); 
      }; 
    } 
} 
+0

我無法得到它的工作,但我不確定是否是由於.NET Core的新版本發生更改。它強調了整個Lambda函數,並且抱怨它缺少'await'運算符。但是它也會在.Redirect行之後的'};'開始引發一系列'} expected'的語法錯誤。如果我放棄'async',它會抱怨並不是所有的代碼路徑都在lambda表達式中返回一個值。 –