【前言】:相信很多小伙伴收到了Salesforce MFA增强政策的邮件通知,这里将结合当前的SF系统背景 + 实测结果 + 与Support咨询后的反馈分享一下调研结果。
【系统背景】:
#1. 当前系统主要使用Sales Cloud,License以Standard为主
#2. 实施了SSO的集成并启用了IdP的MFA
#3. Pipeline用到了UI-Test, 用到了MFA FAQ提到的测试框架
#4. 通过Connected App暴露SFDC服务
#5. 业务人员会使用Data Loader进行数据操作
【MFA调研结果】:
Q1. MFA强制执行的Scope是什么?
A1. 对于Sales Cloud而言,Prod将在2022-02-01强制启用MFA;对于Sandbox而言,暂时是Optional的,但是如果在timeline后刷新Sandbox,MFA将会被强制启用
Q2. 合同上究竟强制启用哪类MFA限制?
A2. 我们在Permission Set中会发现有两种类型的MFA Permissions:UI Login,API Login,从文档来看强制启用的是UI Login
Q3. UI Login启用后会否影响到#2?
A3. 如果IdP提供了MFA,不会影响现有用户
Q4. UI测试会否受影响?(以Cucumber为例)
A4. 如果UI测试pipeline仅仅用于Sandbox环境(非Prod环境),在timeline后不刷新Sandbox前提下,由于MFA Permissions在Sandbox上可配置,因此可以绕过MFA;如果UI测试需要在Prod上进行或者Sandbox因为刷新被强制应用了MFA,这个时候需要临时存储key(如:存储在S3),另外为了防止测试用户的TOTP被Disconnect,同时需考虑动态获取key,即每次UI测试完后在User Detail Page点击disconnect,下次就能生成新key用于产成passcode。
因此,本文观点对上图给的答案是中立的,并非完全肯定,Support给的答复中也能印证:
Q5. 关于#5,Data Loader有何影响?
A5. Data Loader提供两种授权方式,第一种OAuth需要MFA验证,第二种将不受影响
Q6. 如果启用了MFA for API Login,集成用户将如何登入?
A6. 以jsforce为例子,以前我们需要在password后拼security token,这时需要拼passcode,因为security token将不可用。
var jsforce = require('jsforce');
var login_cfg = require('./credentials.json');
const env = login_cfg['sixdeep'];
const domain = env['domain'];
const username = env['un'];
// const password = env['pwd']+env['token'];
const password = env['pwd'] + '129796';
var conn = new jsforce.Connection({
loginUrl: 'https://'+domain+'.salesforce.com'
});
conn.login(username, password, function(err, res) {
if (err) { return console.error(err); }
conn.query('SELECT Id, Name FROM Account limit 5', function(err, res) {
if (err) { return console.error(err); }
console.log(res['totalSize']);
// console.log(res['records']);
});
});
测试截图: