从Salesforce在Xero中进行身份验证

时间:2013-06-25 01:49:12

标签: authentication oauth salesforce

我是Oauth的新手,我将oauth_access_token与Xero合作。 Web服务身份验证对我不起作用。 Xero返回以下错误消息“oauth_problem = signature_invalid& oauth_problem_advice =无法验证签名”。 生成的签名不正确,但生成它的正确方法是什么?

这是生成端点的APEX代码。有什么问题?

Http h = new Http();
String consumer_key='XXX';
Long tmp=(System.now().getTime()/1000);

Blob isItCorrect = Crypto.generateMac('HMacSHA1', Blob.valueOf('https://api.xero.com/api.xro/2.0'), Blob.valueOf(consumer_key));
String signature= EncodingUtil.urlEncode(EncodingUtil.base64Encode(isItCorrect), 'UTF-8');

// Try to get access token
HttpRequest req = new HttpRequest();
req.setEndpoint('https://api.xero.com/oauth/RequestToken?oauth_consumer_key='+consumer_key+
        '&oauth_signature_method=RSA-SHA1'+
        '&oauth_signature='+signature+
        '&oauth_timestamp='+tmp+ '&oauth_nonce='+tmp+'&oauth_version=1.0&scope=https%3A%2F%2Fapi.xero.com%2Fapi.xro%2F2.0');
req.setMethod('GET');

// Send the request, and return a response
HttpResponse res = h.send(req);
System.debug('~~~ '+res.getBody());

它生成以下Endpoint: 端点= https://api.xero.com/oauth/RequestToken?oauth_consumer_key=ICSP7Y5K2TG7RIIC6Y7R7KLC1AHWYC&oauth_signature_method=RSA-SHA1&oauth_signature=gWP02y2EIatw4xilTvd5Iq3e0%2Fw%3D&oauth_timestamp=1372123781&oauth_nonce=1372123781&oauth_version=1.0&scope=https%3A%2F%2Fapi.xero.com%2Fapi.xro%2F2.0

1 个答案:

答案 0 :(得分:1)

  

撇开:我从未与salesforce合作过,所以我不确定是否有更好的   如何利用平台上现有的oauth工作,非常罕见   现在必须自己编写所有的oauth签名内容   容易犯错误但是这里有]

我认为您的签名基本字符串不正确。

据我所知,你只是在https://api.xero.com/api.xro/2.0

上执行HMAC-SHA1

如果你在这里阅读OAuth规范:http://oauth.net/core/1.0/#anchor14你需要构建以下基本字符串(基于上面的请求)

GET& https%3A%2F%2Fapi.xero.com%2Foauth%2Frequesttoken& oauth_consumer_key%3DCONSUMER_KEY%26oauth_nonce(等等,只需将您的所有查询参数除以oauth_consumer作为url编码的键=值对,按字母顺序排列)

然后你需要使用密钥CONSUMER_KEY& CONSUMER_SECRET创建哈希(CONSUMER_KEY和CONSUMER_SECRET都应根据OAuth规范进行参数编码)

那应该给你一个有效的签名..

编辑:我发现这个图书馆可能会有所帮助:https://code.google.com/p/sfdc-oauth-playground/