gpt4 book ai didi

java - Magento Rest Oauth API(签名无效)401

转载 作者:行者123 更新时间:2023-11-29 10:17:08 24 4
gpt4 key购买 nike

当我尝试在 Java 中从 Magento 获取数据时,出现签名无效问题。我的代码有什么问题:

public class MagentoFacade {

final String MAGENTO_API_KEY = "apikey";
final String MAGENTO_API_SECRET = "apisecret";
final String MAGENTO_REST_API_URL = "urlmagento/api/rest";

public void testMethod() {

OAuthService service = new ServiceBuilder()
.provider(MagentoThreeLeggedOAuth.class)
.apiKey(MAGENTO_API_KEY)
.apiSecret(MAGENTO_API_SECRET)
.debug()
.build();




System.out.println("" + service.getVersion());

// start
Scanner in = new Scanner(System.in);
System.out.println("Magento's OAuth Workflow");
System.out.println();
// Obtain the Request Token
System.out.println("Fetching the Request Token...");
Token requestToken = service.getRequestToken();
System.out.println("Got the Request Token!");
System.out.println();

// Obtain the Authorization URL
System.out.println("Fetching the Authorization URL...");
String authorizationUrl = service.getAuthorizationUrl(requestToken);
System.out.println("Got the Authorization URL!");
System.out.println("Now go and authorize Main here:");
System.out.println(authorizationUrl);
System.out.println("And paste the authorization code here");
System.out.print(">>");
Verifier verifier = new Verifier(in.nextLine());
System.out.println();

System.out.println("Trading the Request Token for an Access Token...");
Token accessToken = service.getAccessToken(requestToken, verifier);
System.out.println("Got the Access Token!");
System.out.println("(if your curious it looks like this: "
+ accessToken + " )");
System.out.println();

OAuthRequest request = new OAuthRequest(Verb.GET, MAGENTO_REST_API_URL+ "/products?limit=2");
service.signRequest(accessToken, request);
Response response = request.send();
System.out.println();
System.out.println(response.getCode());
System.out.println(response.getBody());
System.out.println();
}


public static void main(String[] args) {
MagentoFacade mf = new MagentoFacade();
mf.testMethod();
}

public final class MagentoThreeLeggedOAuth extends DefaultApi10a {
private static final String BASE_URL = "urltoMagento/";

@Override
public String getRequestTokenEndpoint() {
return BASE_URL + "oauth/initiate";
}

@Override
public String getAccessTokenEndpoint() {
return BASE_URL + "oauth/token";
}

@Override
public String getAuthorizationUrl(Token requestToken) {
return BASE_URL + "richard/oauth_authorize?oauth_token="
+ requestToken.getToken(); //this implementation is for admin roles only...
}

签名是:NnRaB73FqCcFAAVB4evZtGkWE3k=添加了额外的 OAuth 参数:{ oauth_callback -> oob,oauth_signature -> NnRaB73FqCcFAAVB4evZtGkWE3k=,oauth_version -> 1.0,oauth_nonce -> 753236685,oauth_signature_method -> HMAC-SHA1,oauth_consumer_key -> ptrij1xt8tjis jb6kmdqed2v4rpla8av , oauth_timestamp -> 1359710704 }使用 Http Header 签名发送请求...响应状态码:401响应体:oauth_problem=signature_invalid&debug_sbs=MCe/RB8/GNuqV0qku00ubepc/Sc=线程“main”中的异常 org.scribe.exceptions.OAuthException:响应正文不正确。无法从中提取 token 和 secret :'oauth_problem=signature_invalid&debug_sbs=MCe/RB8/GNuqV0qku00ubepc/Sc=' 在 org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:41) 在 org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:27) 在 org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:52) 在 magento.MagentoFacade.testMethod(MagentoFacade.java:39) 在 magento.MagentoFacade.main(MagentoFacade.java:73)

最佳答案

我可能会为您提供答案,但它可能不适用于您的情况。我努力找出为什么我的本地机器上的签名无效。

事实证明,在 Mage_Oauth_Model_Server::_validateSignature() 中计算签名时,Magento 构建请求 URI 部分修剪了 URL 端口路径:$this->_request->getHttpHost( )

在我的例子中,本地网络服务器在端口 81 上运行,因此我的签名和 Magento 签名不匹配。通过将 false 参数传递给 getHttpHost 方法,您可以防止端口修剪。

我知道这是非常具体的,但我弄清楚为什么会掉头发,所以我需要分享它。谁知道呢,也许这会有所帮助。

干杯布尼

关于java - Magento Rest Oauth API(签名无效)401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com