当前位置: 首页 > 知识库问答 >
问题:

ITfoxtec SAML 2.0:配置AWS SSO时出现InvalidSignatureException

邴烨
2023-03-14

我有一个小的测试应用程序,我已经成功地与Okta集成为IdP。我还建立了AWS SSO作为IdP。当我将应用程序切换到使用AWS SSO时,我收到以下错误:

ITfoxtec.Identity.Saml2.Cryptography.InvalidSignatureException: Signature is invalid.
   at ITfoxtec.Identity.Saml2.Saml2Request.ValidateXmlSignature(SignatureValidation documentValidationResult)
   at ITfoxtec.Identity.Saml2.Saml2Request.Read(String xml, Boolean validateXmlSignature)
   at ITfoxtec.Identity.Saml2.Saml2Response.Read(String xml, Boolean validateXmlSignature)
   at ITfoxtec.Identity.Saml2.Saml2AuthnResponse.Read(String xml, Boolean validateXmlSignature)
   at ITfoxtec.Identity.Saml2.Saml2PostBinding.Read(HttpRequest request, Saml2Request saml2RequestResponse, String messageName, Boolean validateXmlSignature)
   at ITfoxtec.Identity.Saml2.Saml2PostBinding.UnbindInternal(HttpRequest request, Saml2Request saml2RequestResponse, String messageName)
   at ITfoxtec.Identity.Saml2.Saml2Binding`1.Unbind(HttpRequest request, Saml2Response saml2Response)
   at SAML_Example.Controllers.AuthController.AssertionConsumerService() in C:\Workspace\saml\SAML_Example\AuthController.cs:line 46
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我已经验证了AWS SSO返回的签名算法与Okta返回的匹配,http://www.w3.org/2001/04/xmldsig-more#rsa-sha256.是否有人成功地将ITfoxtec配置为AWS SSO?

共有2个答案

方承弼
2023-03-14

我的理解是,断言标记通常是经过签名的。在AWS的情况下,他们对断言标记以及整个响应进行签名。断言标记的签名不会为我验证,但整个响应的签名会验证。我想既然断言在响应中,它也可以被认为是有效的。

我删除了对unbind的调用,并将其替换为以下内容:

var certValidation = true;
var cert = _samlConfig.SignatureValidationCertificates.FirstOrDefault();
var nodes = saml2AuthnResponse.XmlDocument.SelectNodes("//*[local-name()='Signature']").ToEnumerable().ToList();
var responseSignature = nodes.FirstOrDefault(n => n?.ParentNode?.LocalName == "Response");
if (responseSignature != null)
{
    var signedXml = new SignedXml(responseSignature.ParentNode as XmlElement);
    signedXml.LoadXml(responseSignature as XmlElement);
    certValidation = signedXml.CheckSignature(cert, true);
}
else
{
    foreach (var node in nodes)
    {
        var signedXml = new SignedXml(node.ParentNode as XmlElement);
        signedXml.LoadXml(node as XmlElement);
        certValidation = certValidation && signedXml.CheckSignature(cert, true);
    }
}

如果整个响应上没有签名,它会恢复到原始行为并检查存在的每个签名。

涂溪叠
2023-03-14

与 Okta 和 AWS 的集成是基于元数据,还是通过配置 IdP 证书来配置对外部 IdP 的信任?

听起来您正在针对不正确的证书验证AWS IdP。

 类似资料:
  • 我在“提交”主题中放置了一个json对象。我想使用Kafka流使用消息,但出现了一个错误 日志显示: 线程“test-streams-469f5ee6-d0de-472e-a602-a7b6d11f2e1c-StreamThread-1”组织中出现异常。阿帕奇。Kafka。流。错误。StreamsException:无法配置值serde类组织。阿帕奇。Kafka。常见的序列化。Serdes$包装器

  • 问题内容: 我正在IDE Eclipse Indigo(最新版本)上使用JSF 2.0开发Web应用程序。 但是在 Project- > Properties-> Project Facets上,选项 JavaServer Faces 在版本1.2上配置,当我尝试将版本更改为2.0时,出现错误消息 无法将项目构面JavaServer Faces的版本更改为2.0。 奇怪的是,我项目中的JSF库都是

  • 我有一个Spring启动项目,它作为一个库(打包的jar文件)到其他一些项目。我试图哟配置咖啡因缓存,将异步刷新请求后,向服务。 pom.xml(包括): 我的配置类: DAO层(此处需要缓存): DAO层(这里也需要缓存): 运行此安装程序时,我遇到以下错误堆栈: 不确定设置中缺少什么?

  • > 出了什么问题:配置项目“:反应原生矢量图标”时出现问题。 无法解析配置“:反应本机矢量图标:类路径”的所有文件。找不到 com.android.tools.build:gradle:2.3 的任何匹配项。 因为没有可用的com.android.tools.build:gradle版本。在以下位置搜索: https://jcenter.bintray.com/com/android/tools/

  • 我在react-native中构建了一个项目,它在我的计算机上运行良好,但在更改其位置后,问题开始出现。我使用“yarn add@react-native-community/async-storage”安装了这个包

  • 问题内容: 我点击超级链接后有一个操作网址 在我的方法中,我有以下代码 我在表演的时候就在表演。即使正确打印为。 类: 为什么会这样呢? 问题答案: 该未初始化。您应该在操作中以某种方式对其进行初始化 更好的方法是让容器为您完成。您只需要在 那你就会有 而且您不需要解析参数请求,拦截器已经完成了此操作,这是您的操作应运行的一部分。您应该在操作中创建属性以保存参数值。 动作看起来像