Asp.net core Okta和Sustainsys.SAML2的AuthenticateResult.Successed为false
我有一个.Net Core 2应用程序,它利用Sustainsys.Saml2.AspNetCor2(2.7.0)。前端是一个角度应用程序。我采用的SAML方法基于并非常类似于本参考实现中采用的方法: *测试IDP()一切正常 但是,当我们尝试与Okta集成时,回调方法(见下文)中的AuthenticateResult.Successed属性始终为false,即使发布到ASC端点的SAML似乎表明身份验证成功。我们没有看到任何错误。只是没有成功 (请注意,我的公司没有访问Okta的权限,Okta由合作伙伴公司维护。) 以下是控制器中的服务器代码: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
[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.