我正在构建一个需要从salesforce实例中获取数据的移动应用程序。我没有问题使用SOQL来获取适当的数据。但是,我不希望移动应用程序的用户必须登录才能获取令牌,我需要使用该令牌来访问数据。
是否可以通过应用程序中的appId和客户端密钥对应用程序进行身份验证,以允许适当使用/访问API?这类似于在不需要经过身份验证的用户的情况下向Parse或Firebase实例验证应用程序。
谢谢!
答案 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则接受您的公钥/私钥。