詳解ASP.NET與ASP.NET Core用戶驗(yàn)證Cookie并存解決方案
在你將現(xiàn)有的用戶登錄(Sign In)站點(diǎn)從ASP.NET遷移至ASP.NET Core時(shí),你將面臨這樣一個(gè)問題——如何讓ASP.NET與ASP.NET Core用戶驗(yàn)證Cookie并存,讓ASP.NET應(yīng)用與ASP.NET Core應(yīng)用分別使用各自的Cookie?因?yàn)锳SP.NET用的是FormsAuthentication,ASP.NET Core用的是claims-based authentication,而且它們的加密算法不一樣。
我們采取的解決方法是在ASP.NET Core中登錄成功后,分別生成2個(gè)Cookie,同時(shí)發(fā)送給客戶端。
生成ASP.NET Core的基于claims-based authentication的驗(yàn)證Cookie比較簡(jiǎn)單,示例代碼如下:
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的驗(yàn)證Cookie稍微麻煩些。
首先要用ASP.NET創(chuàng)建一個(gè)Web API站點(diǎn),基于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登錄站點(diǎn)中寫一個(gè)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登錄站點(diǎn)的登錄成功后的處理代碼中專門向客戶端發(fā)送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);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET?Core中Cookie驗(yàn)證身份用法詳解
- asp.core?同時(shí)兼容JWT身份驗(yàn)證和Cookies?身份驗(yàn)證兩種模式(示例詳解)
- .NET?Core支持Cookie和JWT混合認(rèn)證、授權(quán)的方法
- asp.net core3.1cookie和jwt混合認(rèn)證授權(quán)實(shí)現(xiàn)多種身份驗(yàn)證方案
- ASP.NET Core 使用Cookie驗(yàn)證身份的示例代碼
- asp.net core中如何使用cookie身份驗(yàn)證
- 3分鐘快速學(xué)會(huì)在ASP.NET Core MVC中如何使用Cookie
- ASP.NET學(xué)習(xí)CORE中使用Cookie身份認(rèn)證方法
- 詳解在ASP.NET Core 中使用Cookie中間件
- ASP.NET?Core在WebApi項(xiàng)目中使用Cookie
相關(guān)文章
詳解.net core webapi 前后端開發(fā)分離后的配置和部署
這篇文章主要介紹了.net core webapi 前后端開發(fā)分離后的配置和部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺(tái)dataTable數(shù)據(jù)列表
jQuery dataTables 插件是一個(gè)優(yōu)秀的表格插件,應(yīng)用非常廣泛,本文給大家介紹利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺(tái)dataTable數(shù)據(jù)列表,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07基于.net4.0實(shí)現(xiàn)IdentityServer4客戶端JWT解密
這篇文章主要為大家詳細(xì)介紹了基于.net4.0實(shí)現(xiàn)IdentityServer4客戶端JWT解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09asp.net 臨時(shí)數(shù)據(jù)保存實(shí)現(xiàn)代碼
在一個(gè)程序運(yùn)行的時(shí)候往往我們會(huì)回到上一個(gè)頁(yè)面,或者我們會(huì)需要當(dāng)時(shí)留在這個(gè)頁(yè)面的臨時(shí)數(shù)據(jù),例如,我們用百度搜索“腳本”之后我們會(huì)看到很多那啥我就不再說了?。∪缓笪覀兎祷乇緛眄?yè)面在文本框內(nèi)會(huì)有“腳本”的字樣,我們一下代碼段就是實(shí)現(xiàn)這個(gè)功能2012-04-04jQuery+Asp.Net實(shí)現(xiàn)省市二級(jí)聯(lián)動(dòng)功能的方法
這篇文章主要介紹了jQuery+Asp.Net實(shí)現(xiàn)省市二級(jí)聯(lián)動(dòng)功能的方法,涉及asp.net數(shù)據(jù)庫(kù)讀取與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-05-05.Net Core中使用ExceptionFilter過濾器的方法
這篇文章主要介紹了.Net Core中使用ExceptionFilter過濾器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03MVC+EasyUI+三層新聞網(wǎng)站建立 實(shí)現(xiàn)登錄功能(四)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第四篇,教大家實(shí)現(xiàn)登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07獲取客戶端IP地址c#/vb.net各自實(shí)現(xiàn)代碼
項(xiàng)目要求獲取客戶端的IP地址,分析并且用c#與vb各自實(shí)現(xiàn)了此要求,有需要的朋友可以了解下啊,希望本文對(duì)你們有所幫助2013-01-01ASP.NET Core按用戶等級(jí)授權(quán)的方法
這篇文章主要介紹了ASP.NET Core按用戶等級(jí)授權(quán),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01ASP.NET GridView控件在列上格式化時(shí)間及DataFormatString使用
在GridView綁定日期格式的時(shí)候,數(shù)據(jù)庫(kù)中的日期為2008-07-04,而GridView顯示的是2007-07-04 000000,多了后面一截很不美觀,想把它去掉不知道有什么好的方法,感興趣的朋友可以了解本文,或許對(duì)你有所幫助2013-01-01