我有一个旧的 .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 的想法或建议将不胜感激。
您可以在早期阶段创建并发字典并在 OnAuthenticationFailed 中访问它