最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core跨站登錄重定向的實(shí)現(xiàn)新姿勢

 更新時間:2018年07月22日 14:09:19   作者:dudu  
這篇文章主要給大家介紹了關(guān)于ASP.NET Core實(shí)現(xiàn)跨站登錄重定向的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

作為 .NET 程序員,痛苦之一是自從 ASP.NET 誕生之日起直到最新的 ASP.NET Core 都無法直接實(shí)現(xiàn)跨站登錄重定向(比如訪問 https://q.cnblogs.com ,跳轉(zhuǎn)到 https://passport.cnblogs.com 進(jìn)行登錄),只能跳轉(zhuǎn)到當(dāng)前站點(diǎn)。

具體拿 ASP.NET Core 來說就是 CookieAuthenticationOptions.LoginPath 只能指定路徑,不能指定包含主機(jī)名的完整 url ,ASP.NET Core 會在重定向時自動加上當(dāng)前請求的主機(jī)名。

services.AddAuthentication()
.AddCookie(options =>
{
 options.LoginPath = "/account/signin";
});

ReturnUrl 查詢參數(shù)也只會包含路徑,不包含完整的 url 。

為了解痛,在 ASP.NET 時代我們服用的解藥要么是不用 ASP.NET 的登錄跳轉(zhuǎn)機(jī)制,要么通過專門的 UserController.Login Action 進(jìn)行二次跳轉(zhuǎn),在 ASP.NET Core 時代我們改服了 Middleware 的解藥,在專門的 Middleware 中進(jìn)行跳轉(zhuǎn)(也比較麻煩)。

昨天在閱讀了 ASP.NET Core Authenticaion 的源碼后,我們找到了一種新的解藥 —— 修改 CookieAuthenticationEvents.OnRedirectToLogin 委托實(shí)現(xiàn)跨站登錄重定向。

以下是新解藥制作方法。

在 Startup.ConfigureServices 中給 AddCookie 添加如下的配置代碼以使用修改后的 url 進(jìn)行重定向:

services.AddAuthentication()
.AddCookie(options =>
{
 var originRedirectToLogin = options.Events.OnRedirectToLogin;
 options.Events.OnRedirectToLogin = context =>
 {
  return originRedirectToLogin(RebuildRedirectUri(context));
 };
});

RebuildRedirectUri 的實(shí)現(xiàn)代碼如下:

private static RedirectContext<CookieAuthenticationOptions> RebuildRedirectUri(
 RedirectContext<CookieAuthenticationOptions> context)
{
 if (context.RedirectUri.StartsWith(ACCOUNT_SITE))
  return context;

 var originUri = new Uri(context.RedirectUri);
 var uriBuilder = new UriBuilder(ACCOUNT_SITE);
 uriBuilder.Path = originUri.AbsolutePath;
 var queryStrings = QueryHelpers.ParseQuery(originUri.Query);
 var returnUrlName = context.Options.ReturnUrlParameter;
 var returnUrl = originUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + queryStrings[returnUrlName];
 uriBuilder.Query = QueryString.Create(returnUrlName, returnUrl).ToString();
 context.RedirectUri = uriBuilder.ToString();
 return context;
}

以上一堆代碼用于實(shí)現(xiàn) url 的轉(zhuǎn)換,詳見博問 https://q.cnblogs.com/q/108087/

這個長久以來的痛苦總算基于 ASP.NET Core 強(qiáng)大的擴(kuò)展與配置能力相對優(yōu)雅地消除了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

衡水市| 泽普县| 上高县| 饶平县| 乌兰察布市| 安远县| 普定县| 东方市| 黔西| 榆树市| 商都县| 瑞安市| 宣汉县| 青州市| 卫辉市| 宝鸡市| 含山县| 肇源县| 德庆县| 托里县| 河西区| 从江县| 景洪市| 铅山县| 孝感市| 清原| 连山| 高唐县| 阿勒泰市| 汉阴县| 澄江县| 小金县| 德令哈市| 石渠县| 民县| 巴塘县| 许昌市| 建瓯市| 黑山县| 吕梁市| 吉首市|