2013-06-25 3 views
1

Я бы хотел использовать PassportJS с Freshbooks.com.PassportJS + Freshbooks - ошибки OAuth

Freshbooks использует OAuth 1.0a, поэтому я скопировал репозиторий, связанный с паспортом, и попытался преобразовать его в Freshbooks.

Я получаю сообщение об ошибке, я не понимаю:

failed to obtain request token (status: 400 data: Unsupported signature method specified.) 

Есть отладочный переключатель для паспорта? Я также собрал еще одну версию, используя только OAuthStrategy, и я получаю ту же ошибку.

Freshbooks OAuth API здесь: http://developers.freshbooks.com/authentication-2/#OAuth

Чтобы запустить пример сервера в модуле:

git clone [email protected]:MichaelJCole/passport-freshbooks.git 
npm install 
npm install passport express ejs passport-oauth 
node example/login/app.js 

Трассировка стека:

failed to obtain request token (status: 400 data: Unsupported signature method specified.) 
    at /home/michaelcole/scm/passport-freshbooks/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:196:36 
    at /home/michaelcole/scm/passport-freshbooks/node_modules/passport-oauth/node_modules/oauth/lib/oauth.js:518:17 
    at passBackControl (/home/michaelcole/scm/passport-freshbooks/node_modules/passport-oauth/node_modules/oauth/lib/oauth.js:374:13) 
    at IncomingMessage.<anonymous> (/home/michaelcole/scm/passport-freshbooks/node_modules/passport-oauth/node_modules/oauth/lib/oauth.js:386:9) 
    at IncomingMessage.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:910:16 
    at process._tickCallback (node.js:415:13) 

ответ

1

Хорошо, это выглядит, как это случилось потому что серверу понадобилось кодирование PLAINTEXT против HMAC-SHA1

Решение заключалось в том, чтобы обновить стратегию, чтобы включить подпись. Метод

function Strategy(options, verify) { 
    options = options || {}; 
    options.requestTokenURL = 'https://' + options.serverName + '/oauth/oauth_request.php'; 
    options.accessTokenURL = 'https://' + options.serverName + '/oauth/oauth_access.php'; 
    options.userAuthorizationURL = 'https://' + options.serverName + '/oauth/oauth_authorize.php'; 
    options.signatureMethod = "PLAINTEXT"; // < ------------------------ HERE 
    options.sessionKey = options.sessionKey || 'oauth:freshbooks'; 

    console.log(options.requestTokenURL);