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

签名引用URI到SecurityTokenReference的映射不正确

东郭宏朗
2023-03-14

我有一个wcf客户端,其中要求我同时使用证书和用户名安全性。

在我输出的头签名中,存在两个引用元素。一个映射(通过URI)到UsernameToken,我的理解是另一个引用元素应该映射到SecurityTokenReference,但它不是。

<o:UsernameToken u:Id="uuid-89f26492-f6ad-4e9d-9106-03ae8dfd6774-1"     xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 <o:Username>xxxxxxx</o:Username>
 <o:Password o:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-    profile-1.0#PasswordText">xxxxxxx</o:Password>
</o:UsernameToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
 <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  <Reference URI="#_1">
   <Transforms>
    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
   </Transforms>
   <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>FNjRLXvhojvaLY/4MhdtsK1cicE=</DigestValue>
  </Reference>
  <Reference URI="#uuid-89f26492-f6ad-4e9d-9106-03ae8dfd6774-1">
   <Transforms>
    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
   </Transforms>
   <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>ZhCGi22F57ASm5YGVjLxe/s5wyY=</DigestValue>
  </Reference>
 </SignedInfo>
 <SignatureValue>CvxcSSur/epImkRyDh8AywiE3E6GabKzhQhGm/ISpHroWFEryIgpFCStZpGdvt6/QxXskgIiP39eQQILRm1CsTFBZkzP+mb1ktis2OlyiGOFfVNnOXVseOktMGt1WpeNlssFNk0prP9gy5EU3lWwxENvHFy8/IZZWCR8A4Cm+yA=</SignatureValue>
 <KeyInfo>
  <o:SecurityTokenReference>
   <o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid-89f26492-f6ad-4e9d-9106-03ae8dfd6774-3"/>
  </o:SecurityTokenReference>
 </KeyInfo>
</Signature>
    private System.ServiceModel.Channels.Binding GetBinding()
    {
        System.ServiceModel.Channels.AsymmetricSecurityBindingElement asbe = new AsymmetricSecurityBindingElement();
        asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
        asbe.InitiatorTokenParameters = new System.ServiceModel.Security.Tokens.X509SecurityTokenParameters();
        asbe.RecipientTokenParameters = new System.ServiceModel.Security.Tokens.X509SecurityTokenParameters();
        asbe.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt;
        asbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
        asbe.IncludeTimestamp = false;
        asbe.SetKeyDerivation(false);
        asbe.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Rsa15;

        asbe.EndpointSupportingTokenParameters.Signed.Add(new UserNameSecurityTokenParameters());

        CustomBinding myBinding = new CustomBinding();
        myBinding.Elements.Add(asbe);
        myBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));

        HttpsTransportBindingElement httpsBindingElement = new HttpsTransportBindingElement();
        httpsBindingElement.RequireClientCertificate = true;
        myBinding.Elements.Add(httpsBindingElement);

        return myBinding;
    }

请注意,这个问题实际上是我的主要问题的一个子问题,我已经在如何使WCF客户端符合特定的WS-Security-SignUsernameToken和SecurityTokenReference中详细说明了这个问题。看起来,通过ootb配置或属性设置无法对证书进行签名,因此答案可能在于手动编写签名块。这就是我接下来要看的。

共有1个答案

葛驰
2023-03-14

最终解决了我在相关问题上发布的问题--如何使WCF客户端符合特定的WS-Security-Sign UsernameToken和SecurityTokenReference

 类似资料:
  • 问题内容: 我已经检查了关于stackoverflow的几乎所有相关文章,但是我无法解决我的问题。 Here is the code: web.xml: spring-servlet.xml: myController: Web Pages/index.jsp: Web Pages/WEB-INF/jsp/hello.jsp: 因此,当我启动该应用程序时,index.jsp已正确加载,但是当我单击

  • 早上,我已经检查了这个问题的大部分答案(在名为DispatcherServlet的DispatcherServlet中找不到URI为的HTTP请求的映射),以及(在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/ChickenTest/index]的HTTP请求的映射),但我仍然得到“在名为“bmoa”的DispatcherServlet中找不到U

  • 我已经查阅了几乎所有关于stackoverflow的相关文章,但我就是不能解决我的问题。 下面是代码:web.xml: spring servlet。xml: myController: 网页/index.jsp: 网页/WEB-INF/jsp/hello.jsp: 所以当我启动应用程序时,索引。jsp加载正确,但当我点击href导航到hello时。jsp我收到一个404错误,服务器日志显示: 我

  • 在Spring项目中, 警告:org。springframework。网状物servlet。PageNotFound-在名为“appServlet”的DispatcherServlet中找不到URI为[/]的HTTP请求的映射 错误不断发生。我不知道为什么会发生这些错误。 请你帮我... servlet上下文。xml 正如你在下面看到的,我指定了@Controller。 BoardControll

  • 我的web.xml applicationContext as 调度器servlet作为 与包com中相同的控制器。思维边缘。特斯塔普 当我点击. 警告:在带名称的DispatcherServlet中找不到与URI[/TestApp/samp]的HTTP请求的映射 此外,当Spring开始时,我没有看到Testapp/示例加载的处理程序 我猜我的组件扫描不起作用。为什么?还有其他原因吗 编辑:调度

  • 当我在JBoss上启动项目时,在名为“appServlet”的DispatcherServlet中,找不到URI为[/myappname/]的HTTP请求的映射。在将访问方法更改为会话后,在解决此处描述的另一个问题:“未找到当前线程的会话”后出现了此问题 在一切顺利之前。我使用的是ApacheTiles 2。我读了一些类似的问题,但我找不到有效的解决方案。 这是我的没有HiberNate配置的文件