从安全性中删除时间戳元素

2023-11-29

所有的极客都会说 WSE 已经过时了.. 现在对我来说没关系.. 只是想找到解决我问题的方法 尝试使用 WSE 使用 Java Web 服务。 在传出的soap请求中有一个安全有附加时间戳的节点。 我的待发肥皂请求如下所示

 <soap:Header>
    <wsa:Action wsu:Id="Id-6209d12b-20bf-407e-ac72-533d0f671a2c"></wsa:Action>
    <wsa:MessageID wsu:Id="Id-280fe225-2f80-4f37-b5d4-120146fc7dec">urn:uuid:a427b687-6f52-4689-9df2-c2e3c6d9ea1a</wsa:MessageID><
    wsa:ReplyTo wsu:Id="Id-bc623f16-761c-4e03-a23e-aa70bd9b8d34"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo>
    <wsa:To wsu:Id="Id-b8607eed-cb9e-426b-a5dc-51d7855c32e1">https://service100.emedny.org:9047/MHService</wsa:To>
   <wsse:Security soap:mustUnderstand="1">
   <wsu:Timestamp wsu:Id="Timestamp-cbeb0310-93bf-4f39-a44d-3516b32b40e6"><wsu:Created>2013-06-20T20:19:47Z</wsu:Created><wsu:Expires>2013-06-20T20:24:47Z</wsu:Expires></wsu:Timestamp><wsse:BinarySecurityToken ValueType></BinarySecurityToken>....</soap:Header>

.. 我正在尝试删除操作、消息 ID、回复、时间戳元素

所以输出应该是这样的

   <soap:Header>
    <wsse:Security soap:mustUnderstand="1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <wsse:BinarySecurityToken........>
</soap:header>

我如何从安全性中删除4个元素+时间戳节点。我正在使用WSE3.0。抱歉,现在不 Wcf rt 这就是我尝试过的。

Step1

Create a custom policy assertion by deriving from Microsoft.Web.Services3.Design.PolicyAssertion.

        namespace UsernameAssertionLibrary
    {
        public class UsernameClientAssertion : SecurityPolicyAssertion, PolicyAssertion
        {
            private string username;
            private string password;

            public UsernameClientAssertion(string username, string password)
            {
                this.username = username;
                this.password = password;
            }

            public override SoapFilter CreateClientOutputFilter(FilterCreationContext context)
            {
                return new ClientOutputFilter(this, context);
            }

            public override SoapFilter CreateClientInputFilter(FilterCreationContext context)
            {
                // we don't provide ClientInputFilter
                return null;
            }

            public override SoapFilter CreateServiceInputFilter(FilterCreationContext context)
            {
                // we don't provide any processing for web service side
                return null;
            }

            public override SoapFilter CreateServiceOutputFilter(FilterCreationContext context)
            {
                // we don't provide any processing for web service side
                return null;
            }
            public override System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Type>> GetExtensions()
            {
                return new KeyValuePair<string, Type>[] { new KeyValuePair<string, Type>("UsernameClientAssertion", this.GetType()) };
            }

            public override void ReadXml(XmlReader reader, IDictionary<string, Type> extensions)
            {
                reader.ReadStartElement("UsernameClientAssertion");
            }


            #region ClientOutputFilter
            class ClientOutputFilter : SendSecurityFilter
            {
                UsernameClientAssertion parentAssertion;
                FilterCreationContext filterContext;

                public ClientOutputFilter(UsernameClientAssertion parentAssertion, FilterCreationContext filterContext)
                    : base(parentAssertion.ServiceActor, false, parentAssertion.ClientActor)
                {
                    this.parentAssertion = parentAssertion;
                    this.filterContext = filterContext;
                }

                public override void SecureMessage(SoapEnvelope envelope, Security security)
                {
                    X509SecurityTokenManager objCertTokenManager = (X509SecurityTokenManager)SecurityTokenManager.GetSecurityTokenManagerByTokenType(WSTrust.TokenTypes.X509v3);
                    objCertTokenManager.DefaultKeyAlgorithm = "RSA15";
                    objCertTokenManager.DefaultSessionKeyAlgorithm = "TripleDES";

                    X509Certificate2 cert = GetCertificateFromStore("LMWARD");
                    X509SecurityToken x5091 = new X509SecurityToken(cert);

                    X509Certificate2 cert2 = GetCertificateFromStore("DPMedsHistory");
                    X509SecurityToken x5092 = new X509SecurityToken(cert2);
                    UsernameToken userToken = new UsernameToken(
                        parentAssertion.username,
                        parentAssertion.password,
                        PasswordOption.SendNone); // we don't send password over network
                                                  // but we just use username/password to sign/encrypt message

                    // Add the token to the SOAP header.
                    security.Tokens.Add(x5091);
                    security.Tokens.Add(x5092);
                    security.Tokens.Add(userToken);


                    // Sign the SOAP message by using the UsernameToken.
                    MessageSignature sig = new MessageSignature(x5091);
                    security.Elements.Add(sig);

                    // encrypt BODY
                    EncryptedData data = new EncryptedData(x5092);
                    // add ancrypted data to the security context
                    security.Elements.Add(data);
                }
                private static X509Certificate2 GetCertificateFromStore(string certName)
                {

                    // Get the certificate store for the current user.
                    X509Store store = new X509Store(StoreLocation.LocalMachine);
                    try
                    {
                        store.Open(OpenFlags.ReadOnly);

                        // Place all certificates in an X509Certificate2Collection object.
                        X509Certificate2Collection certCollection = store.Certificates;
                        X509Certificate2Collection signingCert = certCollection.Find(X509FindType.FindBySubjectName, certName, true);

                        if (signingCert.Count == 0)
                            return null;
                        // Return the first certificate in the collection, has the right name and is current. 
                        return signingCert[0];
                    }
                    finally
                    {
                        store.Close();
                    }

                }
            }
            #endregion
        }
    }

Step2
This is my wse3Policy.Config 

    <policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy">
      <extensions>
        <extension name="usernameAssertion" 
          type="UsernameAssertionLibrary.UsernameServiceAssertion, 
                                         UsernameAssertionLibrary" />
      </extensions>
      <policy name="ServerPolicy">
        <usernameAssertion />
      </policy>
    </policies>

 Step3

     namespace.Service1 MHs = new Service1();
            UsernameClientAssertion assert = new UsernameClientAssertion("user", "pwd");

            // create policy
            Policy policy = new Policy();
            policy.Assertions.Add(assert);

            // and set it to web service
            MHs.SetPolicy(policy);
        Mhs.Method();

我没有收到任何错误。它在策略文件中有一个警告: 元素策略有一个无效的子元素 usernameassertion。可能的元素列表是....... 安全时间戳元素、ActionId、mesageId、replyTo、wsa 元素仍然出现在传出的肥皂中。 我在这里缺少什么..


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从安全性中删除时间戳元素 的相关文章

随机推荐

  • Oracle Java 类中 system.out.println 输出去了哪里?

    我已使用 loadjava 实用程序将 Java 类加载到 Oracle 中 这个类有一些系统输出打印文件消息 当我执行此类的方法时 我想查看系统输出消息 我在哪里可以找到这些消息 系统输出 and 系统错误写入当前跟踪文件 您可以启用 S
  • Python sys.stderr 刷新频率

    sys stderr 多久刷新一次缓冲区 这是不同环境中的标准吗 gt gt gt import sys gt gt gt sys stderr
  • 如何使用 React hooks 和 Redux 从 useEffect 执行 store.unsubscribe

    我有一个使用 redux 和 hooks 的 React 无状态组件 我需要显示页面加载时的项目数量 useEffect 并在每次添加或删除项目时更新它 store subscribe useEffect gt setState items
  • 编译sdk应该低于目标sdk

    对 SO 的压倒性建议是编译 SDK 通常应该与目标 SDK 匹配 https stackoverflow com a 27629181 360211 同样 建议将此 compileSdk 与您的目标 sdk 版本相匹配 https sta
  • 如何从不受支持的国家/地区销售付费应用程序[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想出售我开发的应用程序 但我的国家 罗马尼亚 不支持此服务 因此 我想请一位住在可以销售付费应用程序的国家 法国或美国 的朋友帮助我 现在我不知道该怎么告诉他这个过程 他身边需要什
  • 捕获地理位置错误 - 异步等待

    如何捕获特定于地理位置的错误以通知用户他们必须打开地理定位 catch 记录了一个名为位置误差正如 Mozilla 文档中所引用的 https developer mozilla org en US docs Web API Positio
  • 在 Android M 上请求麦克风权限

    我需要在 Android M 中使用麦克风 我尝试在清单中设置权限组 但无法使其正常工作 这是我在清单中得到的内容
  • 将 iPhone 应用程序与 Shibboleth 集成

    有人将 iPhone 应用程序与 Shibboleth 身份提供商集成吗 谷歌搜索没有得到任何结果 所以我直接询问大师 如果以前没有这样做过 这样做是否可行 两者的答案都是 是 我是一名 Java 人员 所以两周前被问到 学习 Object
  • 温莎城堡如何响应实现多个接口的类?

    例如 我有两个接口 ICustomerService 和 IOrderService 每个接口都有几个函数 例如 GetCustomer GetOrder 等 我想要一个类来实现这两个接口 Server 温莎城堡对此有何回应 首先有可能吗
  • 合并 XmlNodelist

    任何人都可以给我一个将 xmlNodelists 合并到单个列表的解决方案吗 我会使用 LINQ Concat方法 问题是XmlNodeList is IEnumerable相对于IEnumerable lt XmlNode gt 因此你必
  • 解释GDB寄存器(SSE寄存器)

    我已经使用 GDB 1 天了 我对它有了一定的了解 但是 当我使用 GDB 和打印寄存器在最后一个分号处设置断点时 我无法完全解释存储到 XMM 寄存器中的数据的含义 我不知道数据是否采用 MSB gt LSB 格式 反之亦然 m128i
  • R 中向量的子向量之和

    给定一个向量x长度为 k 我想获得一个 k x k 矩阵X where X i j 是x i x j 我现在的做法是 set seed 1 x lt rnorm 10 X lt matrix 0 10 10 for i in 1 10 fo
  • 程序集版本是否可以随每个 TFS 2010 版本自动更新?

    我正在使用 Visual Studio 2010 和 TFS 2010 有没有办法让 dll 版本随着每个 TFS 版本自动递增 Thanks 我有一篇关于如何在 TFS Build 2010 中对程序集进行版本控制的博客文章 如何为 TF
  • 递归与yield返回树中的元素顺序

    我有一个递归函数 在给定起始根节点的情况下返回所有子树节点 private IEnumerable
  • Google App Engine 中可以进行长轮询吗?

    我需要制作需要经常轮询服务器的应用程序 但GAE对请求有限制 因此发出大量请求可能会非常昂贵 是否可以使用长轮询并使请求等待最多 30 秒的更改 Google AppEngine 有一个新功能 Channel API 您可以使用它 A构建良
  • 有人成功调试 iPhone 的单元测试吗?

    我找到了例子如何在 Cocoa 中调试单元测试 or the ADC 页面在这里 但我无法让调试适用于 iPhone 应用程序目标 我可以启动并运行测试 并且它们在构建期间运行 但我需要的是debug一些更复杂的故障的测试 您可能会考虑将测
  • 如何将数据注入到从路由器创建的 Angular2 组件中?

    我目前正在尝试为我们的 Angular1 应用程序 相当复杂的一个 构建 Angular2 原型 基于 alpha44 并且我正在尝试在使用路由和子路由时找到最佳的模型 数据架构 在我的示例中 从从路由创建的子组件中 我想访问父组件的属性
  • 管理许多 git 存储库

    在 git 中设置项目很容易 因此即使对于小脚本 我也可以拥有单独的存储库 现在的问题是如何管理它们 我在多个地方使用这些存储库工作 当我对某些存储库进行更改后 我希望能够更新其他位置的存储库 所以我有一个目录 里面有很多存储库 我怎样才能
  • 如何通过TabBars调用Activity

    我正在制作一个使用选项卡栏的应用程序 现在我需要知道的是 如何通过打开其他选项卡setOnTabChangedListener 在我的代码中 例如 我当前位于选项卡中 当我单击第二个选项卡时 它应该调用第二个选项卡的活动 看下面的代码 Ta
  • 从安全性中删除时间戳元素

    所有的极客都会说 WSE 已经过时了 现在对我来说没关系 只是想找到解决我问题的方法 尝试使用 WSE 使用 Java Web 服务 在传出的soap请求中有一个安全有附加时间戳的节点 我的待发肥皂请求如下所示