Microsoft Azure登录在electron应用程序中失败

Microsoft Azure登录在electron应用程序中失败,electron,azure-active-directory,adal,microsoft-teams,Electron,Azure Active Directory,Adal,Microsoft Teams,我正在尝试使用集成登录功能 此项目位于Angular-6上,用于使用创建桌面应用程序 除了我创建*.exe文件时,登录在任何地方都可以正常工作,因为它有一个文件://URL系统。以下是登录过程中输入正确OTP后的登录失败屏幕 我尝试在->Azure Active Directory->应用程序注册->设置->重定向URL下添加一个文件://*回复URL。但系统并没有接受它 我想实现的是,这个电子应用程序应该可以在任何系统(目前是Windows)中运行,而不需要Azure登录 你能帮我决定我能做

我正在尝试使用集成登录功能

此项目位于Angular-6上,用于使用创建桌面应用程序

除了我创建
*.exe
文件时,登录在任何地方都可以正常工作,因为它有一个文件://URL系统。以下是登录过程中输入正确OTP后的登录失败屏幕

我尝试在->Azure Active Directory->应用程序注册->设置->重定向URL下添加一个文件://*
回复URL
。但系统并没有接受它

我想实现的是,这个电子应用程序应该可以在任何系统(目前是Windows)中运行,而不需要Azure登录


你能帮我决定我能做些什么来让这一切顺利吗?

看起来这是OAuth的问题。OAuth不支持文件URI方案。几天前我也遇到了同样的问题。有两种方法可以从这里开始:

  • 在应用程序中运行本地服务器进行身份验证,并在本地保存身份验证令牌/凭据。使用令牌向azure服务发出进一步请求
  • 不要使用OAuth登录。通过自定义实现使用简单的电子邮件/密码登录对用户进行身份验证

  • 还有第三种在主进程中使用OAuth和节点进行身份验证的方法。但由于安全原因,仅建议在服务器上使用OAuth登录节点,而不建议在电子应用程序中使用OAuth登录节点。就个人而言,我会选择第二个选项。

    由于Azure AD不支持文件系统URL,我在Electron应用程序中创建了一个本地服务器并提供静态文件。通过这种方式,Azure的登录页面成功重定向到正确的本地主机URL(它已添加到Azure设置的
    重定向URL

    下面的代码使用中描述的方法。用于在Electron应用程序中创建本地服务器的代码-

    const port = 18090; // port number for local server
    const appFolder = 'my_app'; // app folder
    const staticFolders = './my_app/path-to-files'; // relative path to static files
    
    // required plugins
    const http = require('http');
    const finalhandler = require('finalhandler');
    const serveStatic = require('serve-static');
    
    // serve up public/ftp folder
    let serve = serveStatic(staticPath, {'index': ['index.html', 'index.htm', 'default.html']});
    // create server
    let server = http.createServer(function onRequest(req, res) {
      serve(req, res, finalhandler(req, res));
    });
    server.listen(port); // listen on mentioned port
    
    
    // Creating a new browser window
    function createWindow() {
      let win = new BrowserWindow({
        ... // required options
      });
    
      win.loadURL(`http://localhost:${port}/`); // listen to local server
    }
    
    现在,您的电子应用程序将侦听本地服务器,而不是文件系统


    注意-上述方法不适用于带有
    asar
    格式文件的生成包。可能有一种可能的方法,我会在找到后添加。

    由于某些用例,我希望避免使用第二种方法。我能做的最后一件事就是把网站放在某个地方,然后把它加载到Electron中。我又问了一个问题,想了解一下。