Asp.net core Okta和Sustainsys.SAML2的AuthenticateResult.Successed为false

Asp.net core Okta和Sustainsys.SAML2的AuthenticateResult.Successed为false,asp.net-core,saml-2.0,okta,sustainsys-saml2,Asp.net Core,Saml 2.0,Okta,Sustainsys Saml2,我有一个.Net Core 2应用程序,它利用Sustainsys.Saml2.AspNetCor2(2.7.0)。前端是一个角度应用程序。我采用的SAML方法基于并非常类似于本参考实现中采用的方法: *测试IDP()一切正常 但是,当我们尝试与Okta集成时,回调方法(见下文)中的AuthenticateResult.Successed属性始终为false,即使发布到ASC端点的SAML似乎表明身份验证成功。我们没有看到任何错误。只是没有成功 (请注意,我的公司没有访问Okta的权限,Okta

我有一个.Net Core 2应用程序,它利用Sustainsys.Saml2.AspNetCor2(2.7.0)。前端是一个角度应用程序。我采用的SAML方法基于并非常类似于本参考实现中采用的方法:

*测试IDP()一切正常

但是,当我们尝试与Okta集成时,回调方法(见下文)中的AuthenticateResult.Successed属性始终为false,即使发布到ASC端点的SAML似乎表明身份验证成功。我们没有看到任何错误。只是没有成功

(请注意,我的公司没有访问Okta的权限,Okta由合作伙伴公司维护。)

以下是控制器中的服务器代码:

[AllowAnonymous]
    [HttpPost, HttpGet]
    [Route("api/Security/InitiateSamlSingleSignOn")]
    public IActionResult InitiateSamlSingleSignOn(string returnUrl)
    {
      return new ChallengeResult(
          Saml2Defaults.Scheme,
          new AuthenticationProperties
          {
            RedirectUri = Url.Action(nameof(SamlLoginCallback), new { returnUrl })
          });
    }

    [AllowAnonymous]
    [HttpPost, HttpGet]
    [Route("api/Security/SamlLoginCallback")]
    public async Task<IActionResult> SamlLoginCallback(string returnUrl)
    {
      var authenticateResult = await HttpContext.AuthenticateAsync(ApplicationSamlConstants.External);

      if (!authenticateResult.Succeeded)
      {
        return Unauthorized();
      }
  
     // more code below, never reached
  
   }
但是,当我使用SamlLoginCallback方法时,此身份验证信息不存在于通过此调用获得的AuthenticateResult中:

 var authenticateResult = await HttpContext.AuthenticateAsync(ApplicationSamlConstants.External);
身份验证结果对象的自定义日志信息如下所示:

2020-09-14 09:28:09.432 -05:00 [ERR] SAML Authentication Failure: authenticateResult.Failure (Exception object) is null; 
No information was returned for the authentication scheme; 
authenticateResult.Principal is null; 
authenticateResult.Properties is null.
authenticateResult.Ticket is null.

哪里出了问题?

这里的根本原因最终是Okta使用的Url与重定向逻辑中的代码不同的结果。URL匹配,但案例不匹配。这导致Cookie无法被后来调用的方法读取,这些方法被发送到不同的URL,即使差异只是在路径的大小写中。一旦我们确保所有路径都完全匹配,一直到外壳,它就开始工作。

这里的根本原因最终是Okta使用的Url与重定向逻辑中的代码不同的结果。URL匹配,但案例不匹配。这导致Cookie无法被后来调用的方法读取,这些方法被发送到不同的URL,即使差异只是在路径的大小写中。一旦我们确保所有的路径完全匹配,直到套管,它就开始工作了

 var authenticateResult = await HttpContext.AuthenticateAsync(ApplicationSamlConstants.External);
2020-09-14 09:28:09.432 -05:00 [ERR] SAML Authentication Failure: authenticateResult.Failure (Exception object) is null; 
No information was returned for the authentication scheme; 
authenticateResult.Principal is null; 
authenticateResult.Properties is null.
authenticateResult.Ticket is null.