IdentityServer4 如何在登录后重定向到上一个 url 页面而不在 IdP 注册所有路由

2023-12-19

按照建议,我会在 IdP 上注册授权回调 url/redirect_url,它可以工作。

但是,如果使用 MVC 应用程序的客户端尝试访问未经授权的页面,将会被重定向到 idsrv 登录页面,该怎么办?

redirect_url 始终是配置的(主页入口点)。

要更改此行为,我必须在 IdP 处注册所有可能的路由。 那不是解决办法!

在 idsrv 登录方法上我尝试过:

Login(string returnUrl)

检查来自的值returnUrl它给/connect/authorize/callback?client_id=...

不应该returnUrl有上一页的url吗?就像普通的 mvc 应用程序一样..

我尝试让 Referer 将其存储在会话中,然后重定向..

 if (!string.IsNullOrEmpty(Request.Headers["Referer"].ToString()))
 {
      this.httpContextAccessor.HttpContext.Session.SetString("Referer", Request.Headers["Referer"].ToString());
 }

但这不起作用Referer 为空...

我已经检查了集成服务上下文中发生的情况

var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);
                        context.RedirectUri

并返回/signin-oidc/这是返回的自动方式(主页入口点)。

有机会获取之前的 url,以便用户可以重定向吗?

那我还能做什么呢?

我正在使用混合流来管理以下客户端:mvc-app、classic-asp、web api


这是一个实现示例,可让您实现您想要的目标。请记住,还有其他方法可以做到这一点。

所有代码都在您的客户端上,服务器永远不知道有关最终网址的任何信息。

首先,您想要创建一个自定义属性来装饰您想要保护的所有操作/控制器:

using System;
using System.Web.Mvc;

namespace MyApp
{
    internal class MyCustomAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);

            if (filterContext.Result is HttpUnauthorizedResult)
            {
              filterContext.RequestContext.HttpContext.Session["oidc-returnUrl"] = filterContext.RequestContext.HttpContext.Request.UrlReferrer?.PathAndQuery;
            }
        }
    }
}

然后您将创建一个登录路由/操作来处理您的所有授权请求:

using System.Web.Mvc;

namespace MyApp
{
    public class AccountController : Controller
    {
        [MyCustomAuthorize]
        public ActionResult Login()
        {
            returnUrl = Session["oidc-returnUrl"]?.ToString();

            // clean up
            Session["oidc-returnUrl"] = null;

            return Redirect(returnUrl ?? "/");
        }
    }
}

可以在启动代码中更改登录路径:

public class Startup
{

    public void Configure(IApplicationBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            LoginPath = "/my-login"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            // setting up your client
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IdentityServer4 如何在登录后重定向到上一个 url 页面而不在 IdP 注册所有路由 的相关文章

随机推荐

  • 更改 R/lattice 中与多个面板关联的条带的背景和文本

    以下是我正在处理的示例 require lattice data barley xyplot yield year site data barley 我想为不同的 sprips 设置不同的条带颜色 并且字体颜色也根据背景颜色进行不同的优化
  • 如何在 Android 应用程序中创建数据库?

    我正在尝试在我的 Android 应用程序中使用 SQLite 我创建了这样的辅助类 public class EventoSQLHelper Configura o da base nome e vers o private static
  • searchable_dropdown 不适用于类列表

    我使用 searchable dropdown 1 1 0 包实现了一个颤振下拉菜单 我用我的班级列表进行了测试 发现搜索文本字段框不适用于我的班级列表 我希望当我在列表中的字符串 整数中搜索值时 我的下拉搜索框能够正常工作 例如 我希望当
  • 未知的正则化器:tensorflowjs 中的 L2

    我已经使用 model 在 python 中训练了一个模型 reg 0 000001 model Sequential model add Dense 24 activation tanh name input dense input sh
  • SQL:给定行之前和之后的行数

    问题是我们要获取给定行 例如由主键标识 之前和之后的总行数 我尝试过在 T SQL MSSQL 2008 中执行以下操作 它给出了正确的结果 但我不知道这是否是最好的方法 WITH cte before AS SELECT ROW NUMB
  • 是否可以在 Spring 中以基于表单的身份验证发送更多数据?

    我对这个比较陌生Spring框架 http en wikipedia org wiki Spring Framework和春季安全 我使用了自定义身份验证方案 HTML
  • 将大型 3gp 文件转换为字节数组

    我正在尝试将大型 3gp 文件 gt 25mb 转换为字节数组 但它给出了内存不足异常 我能够将小于 25 mb 的 3gp 文件转换为字节数组 文件文件1 新文件 Environment getExternalStorageDirecto
  • 如何最大限度地提高 C# 中大数组上按元素运算的性能

    该操作是将数组的每个第 i 个元素 称为 A 与相同大小的矩阵 B 的第 i 个元素相乘 并用获得的值更新 A 的相同第 i 个元素 在算术公式中 A i A i B i 0 在多核环境中优化此操作的最佳方法是什么 这是我当前的代码 var
  • 提取 ARIMA 规范

    从 auto arima 打印拟合模型对象包括一行 例如 带有漂移的 ARIMA 2 1 0 这将是一个很好的项目 可以包含在说明拟合模型的 sweave 或其他 输出中 是否可以将该行提取为块 此时 我所做的最好的事情是从 arma 组件
  • 如何从asp.net中的url中删除页面名称?

    来自以下网址 http www mywebsite com default aspx 我想删除default aspx 这样网址将如下所示 http www mywebsite com 我需要一种快速而干净的方法来执行此操作 并且我只需要使
  • 在单独的构建过程中签入文件后,我可以绕过门控签入构建吗? 2010年TFS

    我为解决方案设置了 2 个构建定义 1 个是每晚触发的夜间构建 另一个是门控签入构建 当开发人员尝试将新更改签入源代码管理时将触发 每晚构建使用自定义模板 该模板使用稍微修改过的方法来增加程序集版本埃瓦尔德 霍夫曼法 http www ew
  • 一夜不活动后出现一般网络错误

    一段时间以来 我们的旗舰应用程序一直出现神秘错误 错误消息是通用的 DBNETLIB ConnectionWrite send 一般网络错误 检查您的网络文档 通过让应用程序在晚上打开并在早上恢复工作 可以可靠地重现这一点 由于它是后端服务
  • Rails 2.3 和 rspec-rails 兼容性

    什么版本的rspec railsgem 仍然与 Rails 2 3 分支兼容 特别是 2 3 14 我试过了2 1 0 但这也适用于 Rails gt 3 0 我应该注意的任何其他依赖项或版本限制吗 Thanks 版本 1 3 4 是 Ra
  • mysql + 导入列标题中有空格的文件 + 如何处理

    我有一个 csv 文件 我想将其导入到 mysql 中 我正在慢慢地做到这一点 我正在尝试使用加载数据文件 https stackoverflow com a 20895203 2392358但首先我必须创建表格 这就是我的问题所在 我尝试
  • Android:与 Android 设备进行 RS232 串行通信

    我有一个MR400s 出租车计价器 http www taxiworld co uk london taximeter rentals硬件 我想使用RS232电缆与这个出租车计价器进行通信 并且我已经在Windows中实现了这种连接和通信
  • 程序结束后出现分段错误

    我正在做一项家庭作业 而且我对 C 还比较陌生 我必须为整数数组创建一个初始值设定项 我的教授给我的声明是 typedef int set t Can t be altered void init set t thing int N Can
  • DNS-SD:使用“mdnsjava”的经验? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我现在正在实施 DNS DS 库 mdnsjava https code google com p mdnsjava 进入我的Andr
  • jquery创建二维数组

    编辑 看来我对我想要完成的事情有点困惑 对于那些花时间解释这一点的人 谢谢 我正在尝试在 Jquery Javascript 中创建一个二维数组 我已经进行了大量的搜索 测试和更多搜索 但我无法找到对我来说真正有意义的解决方案 这已经是漫长
  • python请求中的Http重定向代码3XX

    我正在尝试捕获重定向 url 的 http 状态代码 3XX 302 但我无法获取它 因为它给出了 200 状态代码 这是代码 import requests r requests get http goo gl NZek5 print r
  • IdentityServer4 如何在登录后重定向到上一个 url 页面而不在 IdP 注册所有路由

    按照建议 我会在 IdP 上注册授权回调 url redirect url 它可以工作 但是 如果使用 MVC 应用程序的客户端尝试访问未经授权的页面 将会被重定向到 idsrv 登录页面 该怎么办 redirect url 始终是配置的