首页 > 解决方案 > 使用带有访问令牌的 Node JS API 的 Salesforce 身份验证

问题描述

我需要从 SalesForce API 中检索 Auth Code。我在 Postman 中创建了如下场景。

  1. 使用以下参数配置新令牌

代币配置

  1. 一旦我按下“获取新的访问令牌”,邮递员就会打开一个弹出窗口并要求在登录提示中输入Username和。Password它显示了 SalesForce 的登录页面。

  2. 登录成功后,邮递员会要求使用令牌并将其添加到此处(见下图) 访问令牌

  3. 然后我使用 JSON 正文作为 POST 请求访问端点。

我需要在 NodeJS 中重新创建这个场景,以便将整个过程作为一个单独的过程来工作,绕过所有的登录提示。

我正在使用以下方法来启动此任务以获取令牌。但是,我找到的资源不符合我的要求。

作为第一步,我使用salesforce-oauth2了如下的 npm 包。

oauth2 = require('salesforce-oauth2');

var callbackUrl = "https://test.salesforce.com/services/oauth2/success",
consumerKey = "3MVG9sLbBx**********************2Qi.v***Vlhg3",
consumerSecret = "3MV**bBx**********************2Qi.v***Vlhg3";
    var uri = oauth2.getAuthorizationUrl({
        redirect_uri: callbackUrl,
        client_id: consumerKey,
        scope: 'api', // 'id api web refresh_token'
        // You can change loginUrl to connect to sandbox or prerelease env.
        //base_url: 'https://test.my.salesforce.com'
    });
    return response.redirect(uri);

当我调试上面的代码时,它返回一个指向登录页面的 URL。我不想通过这一步,因为我的要求是在不打开任何中间身份验证弹出窗口的情况下获取 Auth-Code。

我该如何进行呢?在第 3 步之前编程以从 SalesForce API 获取 Auth Token 有什么想法吗?

提前致谢。

标签: node.jsoauthsalesforcesalesforce-communities

解决方案


您标记了这个。重要的是,它真的是针对社区(“体验云”)用户还是内部人员?Salesforce 有很多 OAuth2 流程可供选择:https ://help.salesforce.com/articleView?id=sf.remoteaccess_oauth_flows.htm&type=5

如果您知道密码并且它是内部用户(也许是真人,也许您有一些专门的“集成用户”) - 您可以使用用户名密码流程。没有登录页面,也没有 OAuth 同意步骤。但

此流程不支持范围或刷新令牌。Experience Cloud 站点不支持 OAuth 2.0 用户名-密码流。

您也许可以使用JWT Flow。您需要用户名(无密码),并且您的 Node 应用程序将发送一条使用您之前上传到 SF“已连接应用程序”的证书签名的消息。您甚至可以将用户标记为预授权,这样就没有同意屏幕。

除此之外,我认为社区可用的所有 OAuth2 流程都需要人工输入密码。您可以在 url 中传递登录提示以保存用户名,但在返回您的应用程序之前传递他们需要在 SF 登录页面上提供.

挖掘一点帮助,很高兴被证明是错误的。


推荐阅读