首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salesforce中的SOAP安全性

Salesforce中的SOAP安全性
EN

Stack Overflow用户
提问于 2011-02-17 00:16:51
回答 3查看 5.5K关注 0票数 2

我正在尝试更改web服务调用标头的wsdl2apex代码,目前如下所示:

<env:Header>

代码语言:javascript
复制
 `<Security xmlns="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd">`
代码语言:javascript
复制
     `<UsernameToken Id="UsernameToken-4">`
代码语言:javascript
复制
         `<Username>test</Username>`
代码语言:javascript
复制
         `<Password>test</Password>`
代码语言:javascript
复制
     `</UsernameToken>`
代码语言:javascript
复制
 `</Security>`

</env:Header>

如下所示:

<soapenv:Header>

代码语言:javascript
复制
 `<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">`
代码语言:javascript
复制
     `<wsse:UsernameToken wsu:Id="UsernameToken-4" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">`
代码语言:javascript
复制
         `<wsse:Username>Test</wsse:Username>`
代码语言:javascript
复制
         `<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Test</wsse:Password>`
代码语言:javascript
复制
     `</wsse:UsernameToken>`
代码语言:javascript
复制
 `</wsse:Security>`

</soapenv:Header>

一个问题是,我不知道如何更改元素的名称空间(或者即使它们的名称很重要)。第二个问题是将Type属性放到Password元素上。

任何人能提供任何可能有帮助的信息吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-09 00:06:19

可能不是每个人都能做到,但是我们设法解决了这个问题,方法是使用XSLT将我们拥有的SOAP转换成我们想要的SOAP。

票数 0
EN

Stack Overflow用户

发布于 2013-04-24 03:05:59

我也遇到了类似的问题。我能够生成下面的SOAP头,它适用于我的实现:

代码语言:javascript
复制
   <env:Header>
      <Security xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <UsernameToken>
            <Username>aaaaaa</Username>
            <Password>xxxxxx</Password>
            <Nonce>MzI3MTUzODg0MjQy</Nonce>
            <wsu:Created>2013-04-23T16:09:00.701Z</wsu:Created>
         </UsernameToken>
      </Security>
   </env:Header>

安全类:

代码语言:javascript
复制
public class OasisOpenOrgWssSecuritySecext 
{

    // UserToken Class
    public class UsernameToken 
    {
        // Constructor for UsernameToken used to pass in username and password parameters
        public UsernameToken(String username, String password)
        {
            this.Username = username;
            this.Password = password;
            this.Nonce = generateNounce();
            this.Created = generateTimestamp();
        }

        public String Username;
        public String Password;
        public String Nonce;
        public String Created;
        private String[] Username_type_info = new String[]{'Username','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
        private String[] Password_type_info = new String[]{'Password','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
        private String[] Nonce_type_info = new String[]{'Nonce','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
        private String[] Created_type_info = new String[]{'wsu:Created','http://www.w3.org/2001/XMLSchema','string','0','1','false'};        
        private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
        private String[] field_order_type_info = new String[]{'Username','Password','Nonce','Created'};

        // Generate Nounce, random number base64 encoded
        public String generateNounce()
        {
            Long randomLong = Crypto.getRandomLong();
            return EncodingUtil.base64Encode(Blob.valueOf(String.valueOf(randomLong)));
        }

        // Generate timestamp in GMT
        public String generateTimestamp()
        {
            return Datetime.now().formatGmt('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
        }
    }

    // SecurityHeaderType Class
    public class SecurityHeaderType 
    {       
        // Constructor for SecurityHeaderType used to pass in username and password parameters and instantiate the UsernameToken object     
        public SecurityHeaderType(String username, String password)
        {
            this.UsernameToken = new OasisOpenOrgWssSecuritySecext.UsernameToken(username, password);
        }

        public String wsuNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';              
        public OasisOpenOrgWssSecuritySecext.UsernameToken UsernameToken;
        private String[] UsernameToken_type_info = new String[]{'UsernameToken','http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','UsernameToken','1','1','false'};
        private String[] wsuNamespace_att_info = new String[]{'xmlns:wsu'};               
        private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
        private String[] field_order_type_info = new String[]{'UsernameToken'};
    }
}

将注释之间的行添加到由wsdl2apex生成的类中:

代码语言:javascript
复制
public class XyzWebService {
    public String endpoint_x = 'https://webservice/'
    // ADDITION TO WSDL
    public OasisOpenOrgWssSecuritySecext.SecurityHeaderType Security = new OasisOpenOrgWssSecuritySecext.SecurityHeaderType( 'aaaaaa', 'xxxxxx');
    private String Security_hns = 'Security=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';**                            
    // END ADDITION TO WSDL
    public Map<String,String> inputHttpHeaders_x;
    public Map<String,String> outputHttpHeaders_x;
    public String clientCertName_x;
    public String clientCert_x;
    public String clientCertPasswd_x;
    public Integer timeout_x;
票数 5
EN

Stack Overflow用户

发布于 2011-02-18 03:49:57

我也遇到过类似的问题。我手动创建了一个类来创建基本结构。幸运的是,我使用的服务假定或能够在没有显式设置type参数的情况下确定类型是text,所以您可能想尝试一下,看看它是否有效。

对于名称空间,我将它们设置为属性:

代码语言:javascript
复制
private String[] wsu_att_info = new String[] {'xmlns:wsu'};

这个问题可能也会有帮助:What are the parameters for the Salesforce WebServiceCallout.invoke method?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5018961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档