ASP.NET Core集成Azure ADB2C后登录成功如何实现用户重定向
问题原因
你在OnTokenValidated事件中直接调用重定向不生效,是因为这个事件属于OpenID Connect认证流程的中间环节,事件执行完成后,AD B2C认证中间件还会继续执行后续的认证逻辑,包括默认跳转回触发登录前的请求路径的逻辑,会覆盖你直接对响应设置的重定向配置。
正确实现方式
你不需要额外寻找登录后触发的最终事件,直接在现有OnTokenValidated事件中调整逻辑即可实现需求,有两种常用实现方案:
方案1:修改认证属性中的跳转地址(推荐)
AD B2C认证中间件在完成token校验后,会自动读取上下文携带的AuthenticationProperties中的RedirectUri属性作为最终跳转地址,你只需要修改该属性即可,不需要手动调用重定向方法,代码示例如下:
public async Task OnTokenValidated(TokenValidatedContext context) { // 省略你已有的业务逻辑,比如根据返回的Claims判断目标跳转地址 var targetPath = "~/somewhere"; // 替换为你根据业务逻辑生成的目标路径 // 覆盖默认的跳转地址,中间件后续会自动按该地址完成重定向 context.Properties.RedirectUri = targetPath; await Task.CompletedTask; }
方案2:手动终止认证流程直接重定向
如果你需要完全自定义重定向逻辑,也可以在设置重定向后手动标记认证流程已处理完成,阻止中间件后续逻辑覆盖你的响应配置,代码示例如下:
public async Task OnTokenValidated(TokenValidatedContext context) { // 省略你已有的业务逻辑 context.HttpContext.Response.Redirect("~/somewhere"); // 标记认证响应已处理完成,中断中间件后续执行流程 context.HandleResponse(); await Task.CompletedTask; }
注意该方案需要你自行确保用户身份票据已经正确写入,否则会出现登录完成后用户身份仍未生效的问题,非特殊场景优先使用方案1。
内容的提问来源于stack exchange,提问作者Donny Kwitty
相关产品推荐
相关产品推荐

