使用环境变量或其他方法在owin中的OnAuthenticationFailed中检索主请求url

问题描述 投票:0回答:1

我有一个旧的 .net 应用程序。我正在与 Owin 一起实施 OIDC。此应用程序不是 MVC。 请注意,有一个第三方应用程序使用 IM 工具 Okt 作为单点登录进行身份验证。

在我尝试实现 OIDC 的应用程序中。在此应用程序中我有一个公共页面 这意味着每个人都可以以匿名方式访问,因此如果用户尚未登录,则用户可以以匿名方式访问,并且我们不运行 .challenge),但是如果用户已经通过我的 IM/安全应用程序登录,我需要显示此页面如果用户有适当的访问权限来查看此应用程序,则对用户进行身份验证。 结果我需要执行

HttpContext.Current.GetOwinContext().Authentication.Challenge.

如果我的用户经过身份验证并且可以正确访问 Okta 中的应用程序,则效果很好,因为声明将返回,并且我可以将页面显示为对用户进行身份验证。 现在,如果用户已登录但无权访问此应用程序,Owin 将我带到启动页面中的 OnAuthenticationFailed,并尝试将我重定向到错误页面。 在这种情况下,我希望它不执行任何操作并跳过并向我显示未经身份验证的页面。

我查看了 OnAuthenticationFailed 方法中的上下文,看看它是否为我来自的页面提供了任何值,但它没有。 有什么东西可以用来确定这一点,因为如果有的话我就可以忽略这个特定的公共页面。

我尝试在

中设置环境变量
app.Use((context, next) =>
{
   var request = context.Request;

   IDictionary<string, object> environment = context.Environment;

   // Add a custom value to the environment

     environment["RedirectUriForFailure"] = HttpContext.Current.Request.RawUrl;

     return next();
});

然后在 onAuthenticationFailed 方法中检索,但不会显示在环境变量中。

IDictionary<string, object> environment = context.Request.Environment;
var test = environment["RedirectUriForFailure"];
 test is empty

任何关于如何确定我的请求在 OnAuthenticationFailed 中源自哪个 URL 的想法或建议将不胜感激。

c# .net openid-connect owin okta
1个回答
0
投票

您可以在早期阶段创建并发字典并在 OnAuthenticationFailed 中访问它

© www.soinside.com 2019 - 2024. All rights reserved.