Проверка подписанного запроса: signature_invalid - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь проверить подписанный запрос OpenSocial 0.7 , используя пример кода Java на этой странице. Я думаю, что это должно работать таким образом, но я все еще получаю ошибку signature_invalid.

Основной проверочный код:

 // NOTE: req = HttpServletRequest

 // check for hyves
 if (!"hyves.nl".equals(req.getParameter("oauth_consumer_key"))) {
  throw new RuntimeException("Only hyves supported");
 }

 // update hyves' certificate
 getHyvesCert(req.getParameter("xoauth_signature_publickey"));

 // construct message object
 OAuthMessage oaMessage = new OAuthMessage(req.getMethod(), getRequestUrl(req), getParameters(req));

 // validate message
 // (will throw exception if invalid)
 new SimpleOAuthValidator().validateMessage(oaMessage, new OAuthAccessor(OAUTH_CONSUMER_HYVES));

OAUTH_CONSUMER_HYVES

 private static final OAuthServiceProvider OAUTH_THIS = new OAuthServiceProvider(null, null, null);
 private static final OAuthConsumer OAUTH_CONSUMER_HYVES = new OAuthConsumer(null, "hyves.nl", null, OAUTH_THIS);

getHyvesCert:

 public void getHyvesCert(String name) {

  synchronized(certLoadLock) {

  // in reality this is code that downloads the certificate
  // with the specified name, but this is the result
  hyvesCert = "---BEGIN CERTIFICATE---- etc...";

  OAUTH_CONSUMER_HYVES.setProperty(RSA_SHA1.X509_CERTIFICATE, hyvesCert);

  }   

 }

Методы getRequestUrl и getParameters непосредственно скопированы отсюда .

1 Ответ

1 голос
/ 19 октября 2010

Я нашел проблему.getRequestUrl() вернул неправильный URL, потому что Tomcat находится за прокси-сервером nginx.Таким образом, в то время как отправитель будет использовать URL-адрес "http://example.com/bla" для подписи запроса, сервер использует" http://example.com:8080/bla" для его проверки.

...