OWIN 重定向未命中控制器操作

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

尝试在旧版 MVC 应用程序中实现 OWIN/Open ID(我们尝试了 MSAL,但遇到了一些错误) - 这是一个混合身份验证应用程序,以表单身份验证作为主要选项,以 Open ID 作为选项,因此我们想要获得的所有内容是 ID_TOKEN 并将其与我们的本地用户配置文件相匹配。

我遇到的问题是重定向没有点击控制器操作,而是被重定向,我不明白为什么 - 我调用身份验证挑战,选择我的帐户,然后这个。我可以使用邮递员,它可以很好地击中控制器。

正如您从网络抓取中看到的那样,它使用正确的负载调用 /callback,获取 302 并重定向。认为这可能与 XSS 或其他什么有关,因为它在点击控制器之前就得到了 302。

感谢您的任何帮助 - 在这个问题上已经没有想法了。

这是重定向网址(/回调)。请注意,这是 .Net 框架,而不是 Core。

/// <returns></returns>
        [AllowAnonymous]
        //[HttpPost]
        [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
        [DisableCors]
    
        public async Task<ActionResult> callback ( string code = "",string id_token = "" )
        {

            if (!Request.IsAuthenticated)
            {
                HttpContext.GetOwinContext().Authentication.Challenge(
                    new AuthenticationProperties { RedirectUri = "/" },
                    OpenIdConnectAuthenticationDefaults.AuthenticationType);
            }**strong text**

和 Startup_auth

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            var oidcOptions = new OpenIdConnectAuthenticationOptions
            {
                Authority = authority,
                ClientId = clientId,
                ClientSecret = secret,          
                PostLogoutRedirectUri =logoffUri,
                RedirectUri = redirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = OnAuthenticationFailed
                },
                TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer = false
                },
                ResponseType = OpenIdConnectResponseType.IdToken,
                Scope = OpenIdConnectScope.OpenIdProfile

            };

还有网络日志

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

哦,伙计,在过去 6 个月使用 Microsoft Identity Web 犯下所有可能的错误之后,我对您的处境表示理解。从你的问题来看,我不确定你是否已经放弃了 Microsoft Identity Web,转而使用 ASP.NET Core Identity 或者...其他东西。无论如何,让我分享一下在阅读您的问题时我想到的最重要的三件事:

  1. 当您注册这些 OpenId Connect 身份验证事件处理程序时,请务必调用以前的事件处理程序,因为它们有时会执行重要的操作。我找到了困难的方法(在绝望地追求下面的第 3 条之后)。
  2. 使用 Azure AD 进行身份验证会重定向到 Azure AD STS,然后 Azure AD STS 会重定向回您的应用程序。此时,框架执行其处理,然后触发事件处理程序,您就可以访问令牌(或错误通知)。
  3. 当所有其他方法都失败时,获取您选择的身份验证架构的一个非常简单的工作示例(有太多这使得它变得困难)并一点一点地迁移您的代码,直到您拥有一个工作应用程序。在您需要实际迁移整个应用程序之前,您不可避免地会遇到这个问题。但这总是有效的......最终。
© www.soinside.com 2019 - 2024. All rights reserved.