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

Axis2正在生成wsu:Id=“SecurityToken-…”在请求头中

仲孙铭
2023-03-14

我们正在使用axis2和WS策略,如下所示:

context.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy(PLAIN_TEXT_POLICY_FILE));

带有loadpPolicy代码:

InputStream file = this.getClass().getResourceAsStream(fileName);
  StAXOMBuilder builder = new StAXOMBuilder(file);
  Policy result = PolicyEngine.getPolicy(builder.getDocumentElement());

当我们执行通话时,我们看到:

wsse: UsernameToken xmlns: wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"wsu: Id="UsernameToken-1"

我们希望看到类似以下内容,而不是wsu:Id=“UsernameToken-1”:wsu:Id=“SecurityToken-d61ff167-34c7-430b-b3ad-50c8882ed5t9”

如何做到这一点?我们是否需要更新政策?

共有1个答案

督德明
2023-03-14

在不使用任何策略的情况下,通过Java代码成功地形成了标头:

stub._getServiceClient().addHeader(createRequestHeader());

createRequestHeader包含以下代码:

// Defines some namespace and URL constants
  String WS_SEC_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
  String WS_SOAP_URL = "http://schemas.xmlsoap.org/soap/envelope/";

  SOAPFactory soapFact = OMAbstractFactory.getSOAP12Factory();

  // namespace objects creation
  OMNamespace ns = soapFact.createOMNamespace(WS_SEC_NS, "wsse");
  OMNamespace nsu = soapFact.createOMNamespace(WS_SEC_NS, "wsu");
  OMNamespace nsoap = soapFact.createOMNamespace(WS_SOAP_URL, "soap");

  // Header definition and sub elements
  SOAPHeaderBlock wssHeader = soapFact.createSOAPHeaderBlock("Security", ns);
  wssHeader.addAttribute("mustUnderstand", "1", nsoap);

  OMElement timeStampElement = soapFact.createOMElement("Timestamp", nsu);
  // add random UUID as security ID
  timeStampElement.addAttribute("Id", "Timestamp-" + UUID.randomUUID(), nsu);
  // sub elements of timestamp
  OMElement expires = soapFact.createOMElement("Expires", nsu);
  Calendar cal = Calendar.getInstance();
  // expiry period is now + 5 minutes
  cal.add(Calendar.MINUTE, 5);
  expires.setText(String.valueOf(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(cal.getTime())));
  OMElement created = soapFact.createOMElement("Created", nsu);
  created.setText(String.valueOf(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(new Date())));

  OMElement usernameToken = soapFact.createOMElement("UsernameToken", ns);
  // add random UUID as security token ID
  usernameToken.addAttribute("Id", "SecurityToken-" + UUID.randomUUID(), nsu);
  // sub elements of username token
  OMElement username = soapFact.createOMElement("Username", ns);
  username.setText(user);
  OMElement password = soapFact.createOMElement("Password", ns);
  password.setText(this.password);
  password.addAttribute(WSConstants.PASSWORD_TYPE_ATTR, WSConstants.PASSWORD_TEXT, null);
  OMElement nonce = soapFact.createOMElement("Nonce", ns);
  // fill the nonce as a random encoded UUID
  nonce.setText(HashUtils.createEncodedUUID());
  OMElement createdUser = soapFact.createOMElement("Created", nsu);
  createdUser.setText(String.valueOf(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(new Date())));

  // adding sub elements
  usernameToken.addChild(username);
  usernameToken.addChild(password);
  usernameToken.addChild(nonce);
  usernameToken.addChild(createdUser);

  timeStampElement.addChild(created);
  timeStampElement.addChild(expires);

  wssHeader.addChild(timeStampElement);
  wssHeader.addChild(usernameToken);

以下方法用于哈希:

     public static String createEncodedUUID()
   {
      log.trace("Enter Method createEncodedUUID");
      String randomId = String.valueOf(UUID.randomUUID());
      MessageDigest md = null;
      String result = "";
      try
      {
         md = MessageDigest.getInstance("SHA1");
         md.update(randomId.getBytes());
         byte[] byteNonce = md.digest();
         result = String.valueOf(Base64.encodeBase64(byteNonce));
      }
      catch(NoSuchAlgorithmException e)
      {
         log.error("NoSuchAlgorithmException. Error calling createEncodedUUID.", e);
      }

      log.trace("Return Method createEncodedUUID. Result: {}", result);
      return result;
   }
 类似资料:
  • 我需要生成一个MM7 Soap消息,就像下面的消息一样。我可以生成MM7 Soap,但SMIL消息部分和图像/文本附件是个问题。有人知道如何生成这些零件吗? --===========FBS6FTL4PDKIMRJINCAAIDYTDJ9ULMContent-Transfer-Encoding:8BitContent-Type:Multipart/Related;type=“Application

  • Imgur API对发出get请求所需的授权进行了如下说明: 对于公共只读和匿名资源,如获取图像信息、查找用户注释等,所需做的就是在请求中发送一个带有的授权标头。如果您希望匿名上传图像(图像 不与帐户绑定),或者希望创建匿名 相册,也可以使用此方法。这让我们知道哪个应用程序正在访问API。 我已经看了下面的问题,并尝试了那里建议的东西,但都没有帮助。 带凭据的JSON NSURLRequest 带

  • 我在swift 3中有一个项目,想提出一个GET请求。然而,Alamofire还没有更新到swift 3。何时Alamofire将支持swift 3以及如何用swift 3中的参数硬编码GET请求?

  • 我是一个使用angular的新手,我正在努力学习一点,但我不能使用令牌进行简单的获取。我做了很多研究,最后总是得到这段代码。 对于我的后端,我使用Kotlin/Springboot并配置了Cors。 即使如此,当尝试这样做请求我得到这个错误。 访问位于“”的XMLHttpRequesthttp://localhost:5000/api-v1/来源的帐户/列表 -- 果心js:15713错误Http

  • 使用如下所示的代码生成类问候语。 project.clj src/greeting/core.clj

  • 我在我的项目中添加了一个服务引用。 我需要按照下面的方式传入安全头 null 我怎么设置这个。如果你看一下我是如何设置请求的,有没有可能以同样的方式对头进行设置。 安全XSD嵌入在WSDL中。 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 而且 http://docs.oasis-