当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET Core跨站登录重定向的实现新姿势

ASP.NET Core跨站登录重定向的实现新姿势

2018年08月08日  | 移动技术网IT编程  | 我要评论

小李飞刀传人,创世修罗传全文阅读,h美女游戏

前言

作为 .net 程序员,痛苦之一是自从 asp.net 诞生之日起直到最新的 asp.net core 都无法直接实现跨站登录重定向(比如访问 https://q.cnblogs.com ,跳转到 https://passport.cnblogs.com 进行登录),只能跳转到当前站点。

具体拿 asp.net core 来说就是 cookieauthenticationoptions.loginpath 只能指定路径,不能指定包含主机名的完整 url ,asp.net core 会在重定向时自动加上当前请求的主机名。

services.addauthentication()
.addcookie(options =>
{
 options.loginpath = "/account/signin";
});

returnurl 查询参数也只会包含路径,不包含完整的 url 。

为了解痛,在 asp.net 时代我们服用的解药要么是不用 asp.net 的登录跳转机制,要么通过专门的 usercontroller.login action 进行二次跳转,在 asp.net core 时代我们改服了 middleware 的解药,在专门的 middleware 中进行跳转(也比较麻烦)。

昨天在阅读了 asp.net core authenticaion 的源码后,我们找到了一种新的解药 —— 修改 cookieauthenticationevents.onredirecttologin 委托实现跨站登录重定向。

以下是新解药制作方法。

在 startup.configureservices 中给 addcookie 添加如下的配置代码以使用修改后的 url 进行重定向:

services.addauthentication()
.addcookie(options =>
{
 var originredirecttologin = options.events.onredirecttologin;
 options.events.onredirecttologin = context =>
 {
  return originredirecttologin(rebuildredirecturi(context));
 };
});

rebuildredirecturi 的实现代码如下:

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;
}

以上一堆代码用于实现 url 的转换,详见博问 https://q.cnblogs.com/q/108087/

这个长久以来的痛苦总算基于 asp.net core 强大的扩展与配置能力相对优雅地消除了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网