詳解ASP.NET與ASP.NET Core使用者驗證Cookie並存解決方案

來源:互聯網
上載者:User
本篇文章主要介紹了詳解ASP.NET與ASP.NET Core使用者驗證Cookie並存解決方案 ,具有一定的參考價值,感興趣的小夥伴們可以參考一下。

在你將現有的使用者登入(Sign In)網站從ASP.NET遷移至ASP.NET Core時,你將面臨這樣一個問題——如何讓ASP.NET與ASP.NET Core使用者驗證Cookie並存,讓ASP.NET應用與ASP.NET Core應用分別使用各自的Cookie?因為ASP.NET用的是FormsAuthentication,ASP.NET Core用的是claims-based authentication,而且它們的密碼編譯演算法不一樣。

我們採取的解決方案是在ASP.NET Core中登入成功後,分別產生2個Cookie,同時發送給用戶端。

產生ASP.NET Core的基於claims-based authentication的驗證Cookie比較簡單,範例程式碼如下:

var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, loginName) }, "Basic");var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);await context.Authentication.SignInAsync(_cookieAuthOptions.AuthenticationScheme,  claimsPrincipal,  new AuthenticationProperties  {    IsPersistent = isPersistent,    ExpiresUtc = DateTimeOffset.Now.Add(_cookieAuthOptions.ExpireTimeSpan)  });

產生ASP.NET的基於FormsAuthentication的驗證Cookie稍微麻煩些。

首先要用ASP.NET建立一個Web API網站,基於FormsAuthentication產生Cookie,範例程式碼如下:

public IHttpActionResult GetAuthCookie(string loginName, bool isPersistent){  var cookie = FormsAuthentication.GetAuthCookie(loginName, isPersistent);  return Json(new { cookie.Name, cookie.Value, cookie.Expires });}

然後在ASP.NET Core登入網站中寫一個Web API用戶端擷取Cookie,範例程式碼如下:

public class UserServiceAgent{  private static readonly HttpClient _httpClient = new HttpClient();  public static async Task<Cookie> GetAuthCookie(string loginName, bool isPersistent)  {    var response = await _httpClient.GetAsync(url);    response.EnsureSuccessStatusCode();    return await response.Content.ReadAsAsync<Cookie>();  }}

最後在ASP.NET Core登入網站的登入成功後的處理代碼中專門向用戶端發送ASP.NET FormsAuthentication的Cookie,範例程式碼如下:

var cookie = await _userServiceAgent.GetAuthCookie(loginName, isPersistent);var options = new CookieOptions(){  Domain = _cookieAuthOptions.CookieDomain,  HttpOnly = true};if (cookie.Expires > DateTime.Now){  options.Expires = cookie.Expires;}context.Response.Cookies.Append(cookie.Name, cookie.Value, options);

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援topic.alibabacloud.com。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.