UNPKG

node-salesforce-jwt

Version:

SalesForce Auth 2.0 JWT Bearer Token Flow Implementation

59 lines (48 loc) 1.42 kB
const request = require('request'); const jwt = require('jsonwebtoken'); const testUrl = 'https://test.salesforce.com/services/oauth2/token'; const prodUrl = 'https://login.salesforce.com/services/oauth2/token'; const testAudience = 'https://test.salesforce.com'; const prodAudience = 'https://login.salesforce.com'; module.exports.getToken = function (opts, cb) { const isTest = opts.isTest === true; const options = { issuer: opts.clientId, audience: opts.audience || (isTest ? testAudience : prodAudience), expiresIn: opts.expiresIn || 360, algorithm: opts.algorithm || 'RS256' } const token = jwt.sign({ prn: opts.user }, opts.privateKey, options); const post = { uri: opts.uri || (isTest ? testUrl : prodUrl), form: { 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion': token }, method: 'post' } request(post, function(err, res, body) { if (err) { cb(err); return; }; const reply = JsonTryParse(body); if (!reply) { cb(new Error('No response from oauth endpoint.')); return; }; if (res.statusCode != 200) { const message = `Unable to authenticate: ${reply.error} (${reply.error_description})`; cb(new Error(message)) return; }; cb(null, reply); }); } function JsonTryParse(string) { try { return JSON.parse(string); } catch (e) { return null; } }