首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ASP.NET核心登录重定向中强制returnUrl的绝对uri类型?

在ASP.NET Core登录重定向中,可以通过以下步骤强制returnUrl为绝对URI类型:

  1. 首先,确保在登录页面的表单中有一个名为returnUrl的隐藏字段,用于存储重定向的目标URL。
  2. 在登录方法中,获取returnUrl的值,并检查其是否为绝对URI类型。可以使用Uri.IsWellFormedUriString方法进行验证。
  3. 如果returnUrl不是绝对URI类型,可以使用UrlHelper类的IsLocalUrl方法来判断是否为本地URL。如果是本地URL,则将其转换为绝对URI类型。

以下是一个示例代码:

代码语言:txt
复制
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    // 验证模型并进行登录逻辑

    if (ModelState.IsValid)
    {
        // 验证用户名和密码

        // 如果验证成功
        if (result.Succeeded)
        {
            // 检查returnUrl是否为绝对URI类型
            if (!Uri.IsWellFormedUriString(returnUrl, UriKind.Absolute))
            {
                // 检查returnUrl是否为本地URL
                if (Url.IsLocalUrl(returnUrl))
                {
                    // 将本地URL转换为绝对URI类型
                    returnUrl = Url.Action("Index", "Home", null, Request.Scheme);
                }
                else
                {
                    returnUrl = null; // 或者设置默认的重定向URL
                }
            }

            return Redirect(returnUrl);
        }
        else
        {
            ModelState.AddModelError("", "无效的用户名或密码");
        }
    }

    return View(model);
}

在上述示例中,我们首先使用Uri.IsWellFormedUriString方法验证returnUrl是否为绝对URI类型。如果不是,我们再使用Url.IsLocalUrl方法判断是否为本地URL。如果是本地URL,我们使用Url.Action方法将其转换为绝对URI类型。最后,使用Redirect方法进行重定向。

这样,无论是绝对URI类型还是本地URL,都可以正确地进行重定向,并确保安全性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core 6框架揭秘实例演示:使用最简洁代码实现登录、认证和注销

(本文提供示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》) 一、 认证票据 要真正理解认证、登录和注销这三个核心操作本质,就需要对ASP.NET采用基于“票据”认证机制有基本了解...按照惯例,在介绍认证模型架构设计之前,需要通过一个简单实例来演示如何在一个ASP.NET应用实现认证、登录和注销功能。...这个应该会呈现两个页面,认证用户访问主页会呈现一个“欢迎”页面,匿名请求则会重定向登录页面,我们将这两个页面的呈现实现在如下这个IPageRenderer服务,PageRenderer类型为该接口默认实现...ASP.NET应用主要处理四种类型请求。...ChallengeAsync方法会将当前路径(主页路径“/”,经过编码后为“%2F”)存储在一个名为ReturnUrl查询字符串,SignInAsync方法正是利用它实现对初始路径重定向

25430

ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明授权,高级篇

在这篇文章,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲最后一篇。...1.理解什么是声明 声明(Claims)其实就是用户相关一条一条信息描述,这些信息包括用户身份(Name、Email、Country等)和角色成员,而且,它描述了这些信息类型、值以及发布声明认证方等...属性返回URI Schema,这对于我们来说并不是特别有用,常见被用来当作值Schema定义在System.Security.Claims.ClaimType 类,所以要使输出内容可读性更强,我添加了一个...ASP.NET Identity 基于这个原则增加对第三方Google、Microsoft、FaceBook身份验证支持。...用来描述外部登陆 接着使用定义在UserManager对象FindAsync方法,传入ExternalLoginInfo.Login 属性,来获取AppUser对象,如果返回对象不存在,这意味这这是该用户第一次登录到我们应用程序

2.3K80
  • ASP.NET Core 使用最简洁代码实现登录、认证和注销

    一、 认证票据 要真正理解认证、登录和注销这三个核心操作本质,就需要对ASP.NET采用基于"票据"认证机制有基本了解。...按照惯例,在介绍认证模型架构设计之前,需要通过一个简单实例来演示如何在一个ASP.NET应用实现认证、登录和注销功能。...这个应该会呈现两个页面,认证用户访问主页会呈现一个"欢迎"页面,匿名请求则会重定向登录页面,我们将这两个页面的呈现实现在如下这个IPageRenderer服务,PageRenderer类型为该接口默认实现...ASP.NET应用主要处理四种类型请求。...ChallengeAsync方法会将当前路径(主页路径“/”,经过编码后为“%2F”)存储在一个名为ReturnUrl查询字符串,SignInAsync方法正是利用它实现对初始路径重定向

    41730

    用最简单方式在ASP.NET Core应用实现认证、登录和注销

    本篇文章提供了一个极简实例让读者体验如何在ASP.NET Core应用实现认证、登录和注销。...要真正理解认证、登录与注销这3个核心操作本质,就需要对ASP.NET Core采用基于“票据”认证机制有基本了解。...一旦拥有了由认证方颁发认证票据,我们就可以按照双方协商方式(通过Cookie或者报头)在请求携带该认证票据,并以此票据声明身份执行目标操作或者访问目标资源。...接下来我们就通过一个简单实例来演示如何在一个ASP.NET Core应用实现认证、登录和注销功能。...如下面的代码片段所示,我们定义在ProgramSignOutAsync扩展方法正是调用这个方法来注销当前登录状态。我们在完成注销之后将应用重定向到主页。

    3.4K30

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(76)-微信公众平台开发-网页授权

    前言 网页授权是:应用或者网站请求你用你微信帐号登录,同意之后第三方应用可以获取你个人信息 网上说了一大堆参数,实际很难理解和猜透,我们以实际代码来演示比较通俗易懂 配置 实现之前我们必须配置用户授权获取用户信息域名或者...正式公众号只能配置(域名) 第一步:登录公众号平台 跟我们之前配置公众号平台信息一样 第二步: 打开开发者工具 拉到下半部分位置网页账号  第三步:配置你授权回调域名 实现 我们模拟一个需要授权页面...">用户尝试进入需要登录页面 /// public ActionResult Index(string returnUrl...并且,即使在未关注情况下,只要用户授权,也能获取其信息) /// 返回类型,请填写code(或保留默认)</param...这里code用于换取access_token(和通用接口access_token不通用) * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri

    1.2K80

    微信开放平台:微信扫码登录功能

    用户允许授权后,将会重定向到redirect_uri网址上,并且带上code和state参数 redirect_uri?...code=CODE&state=STATE 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数 redirect_uri?...;存储在客户端,极有可能被恶意窃取(反编译获取Appsecret); 2、access_token 为用户授权第三方应用发起接口调用凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token..., URLEncoder.encode(returnUrl)); return "redirect:" + url; } //用户授权同意后回调地址,从请求参数获取...存入数据库 ② 将授权后跳转地址改为登录地址 //用户授权同意后回调地址,从请求参数获取code @GetMapping("/qrUserInfo") public String

    6.6K11

    Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅!!

    用户允许授权后,将会重定向到redirect_uri网址上,并且带上code和state参数 redirect_uri?...code=CODE&state=STATE 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数 redirect_uri?...;存储在客户端,极有可能被恶意窃取(反编译获取Appsecret); access_token 为用户授权第三方应用发起接口调用凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token..., URLEncoder.encode(returnUrl));         return "redirect:" + url;     }     //用户授权同意后回调地址,从请求参数获取...存入数据库 ② 将授权后跳转地址改为登录地址  //用户授权同意后回调地址,从请求参数获取code     @GetMapping("/qrUserInfo")     public String

    4.8K31

    IdentityServer Topics(5)- 使用第三方登录

    ASP.NET Core有一个灵活方式来处理外部认证。 这包括几个步骤。 如果您使用ASP.NET Identity,则许多底层技术细节对您而言都是隐藏。...建议您还阅读Microsoft文档并查看ASP.NET Identity快速入门源码。 添加外部认证处理程序 与外部提供者交互所需协议实现被封装在一个认证处理程序。..."; }) 登录方案指定将暂时存储外部认证结果cookie处理程序名称,例如 由外部提供商发送身份单元。 这是必要,因为在完成外部认证过程之前,通常会有几个重定向。...ISecureDataFormat 当重定向到外部提供商登录时,来自客户端应用程序状态必须频繁进行往返。...ASP.NET Core提供OpenID Connect身份验证处理程序利用了该协议这一功能,这就是它如何实现上述returnUrl功能。

    2.9K30

    基于Spring简易SSO设计

    主要由3大部分组成, 1.1 SSO Client Filter 类似Asp.NetHttpMudule,用来拦截client webapp所有请求,如果发现Cookie没有已登录token标识...直接重定向到ssologin页面,并在returnURL参数,将请求页面传递给sso 3.1 登录成功后,生成一个token字符串,然后将token-user info映射关系,存入token server...3.2 同时重定向到Client Website登录页面,并在url附加一个token参数 3.2.1 Client Website收到返回token url参数后,写入Cookie 3.2.2...将token参数从url中去掉,重定向登录请求页面(即:returnURL) 转入下面的处理:  verify token(B) ?...,能重定向到用户需要访问页面) 3 sso收到请求token后,到token server验证真伪(带上当前请求页面地址,做为returnUrl附带在url参数) 4 token server返回验证结果

    1.5K60

    快速入门系列--WebAPI--01基础

    消息处理管道 还记ASP.NET MVC核心是HttpHandler,而在WebAPI其管道处理器是HttpMessageHandler。...Tip:额外想想也能理解WebAPI管道为什么更加轻量化,因而它只需要处理Json等类型数据,不需要考虑页面、JS、静态资源等内容。...名称 状态 响应类型 Active Directory客户端证书身份验证 已禁用 HTTP 401 质询 ASP.NET 模式 已禁用 Forms身份验证 已禁用 HTTP 302 登录/重定向 Windows...步骤2:浏览器接受到该请求后,针对重定向地址发送请求,登录页面最终被呈现在浏览器。...参数名 解释 Response_type 表示请求希望获取对象类型,在此我们希望获取是Authorization Code Redirect_uri 表示授权服务器在获得用户授权并完成对用户认证后重定向地址

    2.2K70

    温故知新 .Net重定向深度分析

    “http”或“https”地址 ASP.NET MVC以至于.NET Core均淡化了服务端重定向操作,可采用MVC Controller/Action替代 合理选择重定向方式 以上核心差异, 某些情况下需要合理选择重定向方式...我们来分析标准单点登录CAS中发生三次302重定向: ?...部分常见3xx响应码常规用法: 301 “永久移动” 站点改版,比如我们在nginx强制要求使用 HTTPS: server { listen 80;...总结:本文简要分析了Client Redirect,Server Redirect核心差异、使用场景; 最后给出了HTTP 3XX响应码标准规范。...Core因浏览器内核版本引发单点登录故障 ● MongoDB副本集自动故障转移原理(含客户端) ● HTTP Strict Transport Security (HSTS) in ASP.NET

    1.4K20

    Identity Service - 解析微软微服务架构eShopOnContainers(二)

    接上一篇,众所周知一个网站用户登录是非常重要,一站式登录(SSO)也成了大家讨论热点。...微软在这个Demo,把登录单独拉了出来,形成了一个Service,用户注册、登录、找回密码等都在其中进行。...用户登录一段代码,其中props属性进行了设置,但是在后面没有使用到,因为是为以后支持持续化登录准备吧。...当你能在浏览器看到这个页面的时候,说明程序运行正常,配置也正确,接下来看下如何在docker运行。 1、右键项目-发布,把项目编译发布到某个文件夹。.../publish 在你终端看到输入处上一行有这个目录,说明你已经进入到这个目录了,: ?

    1.2K50

    微信公众平台开发(四)——微信网页授权:获取用户openid&用户基本信息

    微信网页授权 在开发,如果web产品需要使用到微信功能,比如微信授权登录、微信支付、微信投票等,我是开发东东是一个web项目,然而如果需要接入微信的话,就需要使用道微信微信网页开发相关功能。...其中我们需要东西就是拿到微信服务器回调,比如用户扫码登录我们web项目时,用户正确授权之后,微信服务器能回调到我们期望url并且返回相应参数信息。...appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect...OAuth2.0机制实现,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,获取用户基本信息...; 其他微信接口,需要通过基础支持“获取access_token”接口来获取到普通access_token调用。

    11.9K20

    asp.net core 系列】13 Identity 身份验证入门

    前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单加密算法对数据加密。这一篇我们将探索如何实现asp.net core身份验证。 ? 1....ReturnUrl=XXXX 其中ReturnUrl指向来源页。 1.1 设置验证 当我们在Startup类里设置启用了身份验证后,并不是访问所有接口都会被跳转到登录页面。...1.2 设置忽略 我们在开发过程,会遇到这样一组链接或者页面:请求地址同属于一个控制器下,但其中某个地址可以不用用户登录就可以访问。...,它接受了一个ClaimsPrincipal类型参数。...总结 在这一篇,简单介绍了asp.net coreidentity,下一篇将从实际上带领大家设置不一样identity以及Authorize验证。

    98420

    .net认证(authentication)与授权(authorization)

    用Membership/Role做过asp.net开发朋友们,看到这二个接口定义,应该会觉得很眼熟,想想我们在Asp.Net页面是如何判断用户是否登录以及角色?...Form2直接就能判断用户是否登录,以及当前登录用户角色。...这就是webform与winform不同地方,asp.net默认表单认证方式是Windows,所以程序一运行,asp.net就把windows当前登录用户视为已经登录了,因此我们得改变asp.net...顺便再回忆一下Asp.Net页面生命周期,每个AspX页面在请求认证时,都会触发Application_AuthenticateRequest事件,而这个事件是定义在Global.ascx,所以可以从这个入手...(不管是winform还是webform),强烈建议大家尽量向微软自带标准模型靠拢,这样在多种不同类型应用整合时,将非常方便,而且兼容性好,容易升级。

    1.7K100

    SharePoint 2013混合模式登陆 使用 自定义登陆页

    接前一篇博客《SharePoint 2013自定义Providers在基于表单身份验证(Forms-Based-Authentication)应用》,当实现混合模式登陆后,接着我们就应该自定义SignIn...基于表单验证(FBA )登陆控件选择了ASP.NET Login控件,设置其相关属性即可。...详见《SharePoint 2013自定义Providers在基于表单身份验证(Forms-Based-Authentication)应用》 DisplayRememberMe:Bool类型,表示是否显示记住我...TitleTextStyle-Font-Names="宋体" TitleTextStyle-Font-Size="Larger" /> 到目前为止基于表单身份验证登录已经设计好了...总结 对于自定义ASP.NET Login控件名称,注意其名字必须是:signInControl,我在次纠结了很久(异常信息,登陆成功后仍然显示身份验证无效,重定向至:/Authenticate.aspx

    2K80

    谈谈基于OAuth 2.0第三方认证

    一般来说,Implicit类型Authorization Grant大都被将浏览器作为执行上下文客户端应用采用,换句话说,这样客户端就是在浏览器执行JavaScript程序。...下图体现了这样一个采用Implicit类型Authorization Grant客户端应用取得授权、得到Access Token并最终获取到受保护资源(登录用户个人信息)完整流程。 ?...第一张图所示,我们采用重定向地址为“http://www.myapp.com/capturetoken”,那么最终浏览器将会重定向到地址“http://www.myapp.com/capturetoken...我们在ASP.NET Web API应用定义了如下一个继承自ApiControllerDemoController,它具有唯一一个用于获取当前登录用户个人基本信息Action方法GetProfile...现在我们直接利用浏览器来调用定义在DemoControllerAction方法GetProfile,如果当前用户尚未登录到Windows Live,浏览器会自动重定向到Windows Live登录界面

    1.2K70
    领券