node.js - 如何使用 ADAL 和 MFA 登录 AAD
问题描述
我正在尝试创建一个 nodejs api,它使用 ADAL 插件(https://github.com/AzureAD/azure-activedirectory-library-for-nodejs)连接到 Azure Active Directory。
对于普通用户来说一切正常,但如果用户启用了 MFA(多因素身份验证),它会失败并抛出错误消息。我发现这与 ADAL-MFA 有关:https ://github.com/AzureAD/azure-activedirectory-library-for-nodejs/issues/151但我从他的回答中不清楚是否可能,以及如何实施 MFA。
该插件的文档非常差,我不清楚如何从中检索错误消息和变量。据说错误变量是一个对象,但它是一个字符串。
这是我的端点代码,适用于普通用户:
var adal = require('adal-node');
var AuthenticationContext = adal.AuthenticationContext;
var authorityUrl = parameters.authorityHostUrl + '/' + parameters.tenant;
var resource = '00000003-0000-0000-c000-000000000000';
var context = new AuthenticationContext(authorityUrl, true, new adal.MemoryCache);
context.acquireTokenWithUsernamePassword(resource, parameters.username, parameters.password, parameters.clientId, function(err, token) {
if(err){
mysql_connection.end();
return callback(null, {
status: false,
error: err.stack,
log: logging.message,
test: 1
});
}
)};
所以基本上我需要使用用户凭据(电子邮件和密码)连接到 AAD api,但服务器到服务器(我的 nodeJS api 到 AAD api)。它需要与 MFA 一起工作。
(web app -> nodeJS API -> AAD API)
acquireTokenWithUsernamePassword
完美地为此工作,但它不适用于 MFA,或者我不知道做出正确的调整以使其工作。
解决方案
您正在使用资源所有者密码凭据授予流程 (ROPC),并且遇到了我告诉人们不要使用它的确切场景之一。(除了测试自动化)
您不能对具有 MFA 的用户使用 ROPC。您也不能将它与与本地 AD 或 Microsoft 个人帐户联合的用户一起使用。或与密码已过期且需要重置的用户一起使用。
您需要切换您的 API 以使用代表授权流程(将您的 API 获得的访问令牌交换为新令牌,继续委派)或客户端凭证流程(仅使用应用凭证获取令牌,没有用户)来获取令牌语境)。
推荐阅读
- php - 警告:SQLite3::exec():靠近“.”:语法错误
- php - 使用 PHP/MYSQLI 进行多重登录
- java - CORS 策略不适用于特定端口。如何解决?
- vb6 - vb6中如何将水晶报表导出为excel
- c# - Double、Float 或 Decimal 的 SqlParameter
- database - 为什么我们只能通过 Tableau Public 连接(提取数据)文本和 excel 文件,而不能连接 Oracle 等数据库?
- python - model.predict 给出了 Tensorflow 错误 Inconsistent values for attr 'T' DT_INT16 vs. DT_FLOAT while building NodeDef using Op name=StridedSlice
- java - 如何遍历Java列表数组将对象键值对保存到自己的数组中
- swift - 如何在没有 PostgreSQL 时区的情况下将 Swift 日期或字符串转换为时间戳?
- python - IronPython 与 .net API 的集成