Visual studio code 如何实现连接到需要MFA的服务的扩展?

Visual studio code 如何实现连接到需要MFA的服务的扩展?,visual-studio-code,office365,vscode-extensions,Visual Studio Code,Office365,Vscode Extensions,您将如何实现连接到需要MFA的外部服务(Office365)的扩展 背景 我目前正在使用SPGo()扩展,它允许用户与Microsoft SharePoint Online进行交互。我的组织最近需要MFA,并已禁用创建应用程序密码的功能,如本期()所述 我正试图找出是否有什么我可以建议这个扩展的实现者,使这项工作。如果VisualStudio代码现在不支持这样做,我想阐明一个支持这种类型流的功能请求。MFA确实是一种方法。浏览器应用程序使用它进行身份验证很容易,但是桌面应用程序必须通过使用env

您将如何实现连接到需要MFA的外部服务(Office365)的扩展

背景

我目前正在使用SPGo()扩展,它允许用户与Microsoft SharePoint Online进行交互。我的组织最近需要MFA,并已禁用创建应用程序密码的功能,如本期()所述


我正试图找出是否有什么我可以建议这个扩展的实现者,使这项工作。如果VisualStudio代码现在不支持这样做,我想阐明一个支持这种类型流的功能请求。

MFA确实是一种方法。浏览器应用程序使用它进行身份验证很容易,但是桌面应用程序必须通过使用
env.openExternal(uri)
API将最终用户引导到云身份验证页面来完成一些额外的工作。身份验证服务通常需要知道您的应用程序,并且应该知道在成功进行MFA身份验证后将浏览器页面重定向到哪里。重定向应该转到某个本地
http://localhost:port/auth-回调
,您必须使用
express
从VS代码扩展中临时托管回调。下面是一些伪代码:

import express=require('express');
导入http=require('http');
从“vscode”导入{env};
函数getLoginAndGetToken(onSuccess:(令牌:字符串,…)=>void,onError:(消息:字符串)=>void){
var-server:http.server=null;
app.post('/auth callback',函数(req:any,res:any){
server.close();
试一试{
//todo:检查当前请求正文
//从'req.body'中提取令牌`
成功时(req.body.xyzToken,…);
//todo:在'res'中输入一些确认信息`
res.sendStatus(200);
}捕捉(错误){
误差;
res.sendStatus(401);
}
});
server=http.createServer(app);
server.on('error',函数(e){
onError(e.message);
});
监听(callbackPort);
setTimeout(()=>{server.close();},timeoutims);
环境openExternal(cloudAuthUrl+nonce);
}
然后在与云服务的通信中使用令牌


下面是node.js web应用程序的教程。它详细介绍了O365 OAuth2的细节。实际上,您需要将其重构为上面的伪代码。一旦你有了它,请在这里分享。

SPGo作者。我真的很想在SPGo中添加对Office 365 MFA的支持,但在VSCode允许扩展作者打开外部URI并访问HTTP请求/响应对象之前,目前还不可能这样做。这将需要和API的功能组合。解决方案的工作原理如下:

  • 用户通过配置向导或SPGo.json配置文件将SPGo配置为使用MFA
  • SPGo将在扩展上下文中打开浏览器会话,指向Office 365 MFA登录屏幕
  • 成功登录后,SPGo将从会话上的cookie集合中刮取MFA令牌
  • 然后,SPGo将使用该令牌与SharePoint Online进行通信,直到cookie过期
  • 我对Jan上面提到的解决方案的理解是,它适用于支持基于API的MFA的MFA提供商,但Office 365要求您通过单个浏览器窗口处理完整的MFA登录。当我以前尝试过这种方法时,VSCode阻止我在会话中打开浏览器会话。也许这已经改变了

    要回答您关于如何帮助SPGo实现这一目标的具体问题,我建议如下:

  • 在项目GitHub上创建问题。(最近创建了一个)
  • 通过分叉repo、添加功能和提交Pull请求来帮助编写解决方案

  • 感谢您使用SPGo,我感谢您的反馈!请通过上面的链接帮助我跟踪这个问题。

    我看到了GitHub上关于想要MFA登录的讨论,我看到了你类似的回答,vscode不允许这样做。这就是为什么我决定为vscode提出一个问题。因为听起来vscode需要更改才能支持这一点。我的计划是弄清楚你是否真的可以让MFA工作,然后看看我是否有能力帮助实现一个解决方案。我希望这是有意义的,我没有试图绕过现有的SPGOGitHub。我不认为VS代码中缺少任何东西。Node.js提供了我们需要的所有部件。我们只需要
    vscode.env.openExternal
    。Node.js帮助您托管一个Express服务,以等待身份验证完成。我想我理解您的伪代码。我不清楚如何使用新的env.asExternalUri来简化这一过程,但我想我会看看是否可以让它与env.openExternal一起工作。你知道有没有人真的用O365做过这件事吗?我觉得奇怪的是,我找不到任何与用作示例类似的示例VSCODE扩展。是的,
    VSCODE.env.asExternalUri
    在最新的VS代码版本中得到了澄清,不,它没有那么重要,所以我从答案中删除了它。我还为node.js添加了一个指向O365 OAuth2教程的链接,该教程的详细信息将放在上面的伪代码中。非常感谢。我会看一看文档,看看是否能找到正确的方法。