向Salesforce实例验证外部应用程序

时间:2017-09-10 16:13:49

标签: authentication salesforce force.com

我正在构建一个需要从salesforce实例中获取数据的移动应用程序。我没有问题使用SOQL来获取适当的数据。但是,我不希望移动应用程序的用户必须登录才能获取令牌,我需要使用该令牌来访问数据。

是否可以通过应用程序中的appId和客户端密钥对应用程序进行身份验证,以允许适当使用/访问API?这类似于在不需要经过身份验证的用户的情况下向Parse或Firebase实例验证应用程序。

谢谢!

2 个答案:

答案 0 :(得分:0)

这是nodejs / Express中的一个示例,在此示例中,我获取了帐户:

var express = require('express');
var router = express.Router();
var nforce = require('nforce');
/* GET home page. */
router.get('/', function(req, res, next) {

var accounts =[];
// create the connection with the Salesforce connected app
var org = nforce.createConnection({
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
redirectUri: process.env.CALLBACK_URL,
mode: 'single'
});

 // authenticate and return OAuth token
 org.authenticate({
 username: process.env.USERNAME,
 password: process.env.PASSWORD+process.env.SECURITY_TOKEN
 }, function(err, resp){
  if (!err) {

  console.log('Successfully logged in! Cached Token: ' + 
  org.oauth.access_token);
  // execute the query
  org.query({ query: 'select id, name from account' }, function(err, resp){
    if(!err && resp.records) {
      // output the account names
      for (i=0; i<resp.records.length;i++) {
        //console.log(resp.records[i].get('name'));
        accounts.push(resp.records[i].get('name'));
      }

      res.render('index', { title:'Accounts',accounts:accounts });
    }
  });
}
 if (err) console.log(err);
 }); 

 //console.log(accounts);

 });

 module.exports = router;

你需要获得api crendentials进行身份验证,使用这个概念的语言并不重要。

USERNAME:您的Salesforce用户名

密码:您的Salesforce密码

SECURITY_TOKEN:您的用户安全令牌,如果您没有,您可以转到我的设置 - 个人 - 重置我的安全令牌,Salesforce会将令牌发送给您的电子邮件。

其他参数是您从应用中获得的参数,因此您必须注册该应用以获取安全令牌。

创建连接的apd您可以转到:在连接的应用程序部分中创建 - 建立 - 创建应用程序创建一个新的应用程序。连接的api生成一个消费者密钥和一个消费者秘密。

CLIENT_ID:是消费者密钥

CLIENT_SECRET:消费者保密吗

CALLBACK_URL:我的示例中的回调网址为:http://localhost:3000

答案 1 :(得分:0)

这在本地是不可能的。 Salesforce中对数据/元数据的所有访问都通过Salesforce用户帐户进行。 通过用户名/密码或SSO(oAuth / SAML)或“委派的身份验证”(SAML之前的身份验证服务)进行用户帐户身份验证。

创建“连接的应用程序”是由salesforce管理员启用的功能,该功能使您的移动应用程序可以通过oAuth与公共/私有密钥对进行连接。 但是,仍然需要登录。

也许您可以将中间件放置在salesforce和API之间-中间件将使用salesforce用户帐户连接到salesforce,而其公开的API则接受您的公钥/私钥。