带有 OAUTH2 和 Salesforce 的 NodeJS HapiJS (force.com)

NodeJS HapiJS with OAUTH2 and Salesforce (force.com)

你好 bell / hapi 开发人员 and/or 专家...预先感谢您的任何建议...我正在尝试为 oauth 完成一个 forcedotcom 策略 (salesforce),它几乎可以工作,我找不到任何关于该错误的文档。

我收到错误消息“[错误:获取自定义访问令牌失败]”

我的应用程序正确重定向到 Salesforce,提示登录 Salesforce 域,进行身份验证,并正确 returns 返回回调 URL,然而,回调 url route/controller,失败,因为 "isAuthenticated" 是假的,但我可以在请求中看到,从 salesforce 返回到回调的 URL 包含一个 "code" 参数(auth 访问令牌,和一个 "state"值。)

这是我的策略

// Register bell with the server
server.register(require('bell'), function(err) {
  server.auth.strategy('forcedotcom', 'bell', {
    provider: {
      protocol: 'oauth2',
      useParamsAuth: false,
      auth: config.forcedotcom.authURL,
      token: config.forcedotcom.tokenURL
    },
    isSecure: false,
    clientId: config.forcedotcom.clientID,
    clientSecret: config.forcedotcom.clientSecret,
    password: config.sessionCookie.sessionSecret,
    location: config.forcedotcom.callbackURL
  });
});

这里是回调路由(在回调的配置中指定URL

server.route({
  method: ['GET', 'POST'],
  path: '/auth/forcedotcom/callback',
  config: {
    auth: {
      strategy: 'forcedotcom',
      mode: 'try'
    },
    handler: function(request, reply) {
      console.warn('request', request, 'reply', reply);
      if (!request.auth.isAuthenticated) {
        return reply('Authentication failed due to: ' + request.auth.error.message);
      }

      return reply.redirect('/');
    }
  }
});

任何方向都会很棒。谢谢!

我认为您需要将 useParamAuth 设置为 true。 Salesforce 要求 client_secretclient_id 作为查询参数,而不是 headers.

您也可以试试这个库 https://www.npmjs.com/package/hapi-salesforce-auth-suite,它包括 signrequest auth 和 oauth。