Войдите в Azure Enterprise Applicate с библиотекой @Azure/MSAL Node с помощью электронаJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Войдите в Azure Enterprise Applicate с библиотекой @Azure/MSAL Node с помощью электрона

Сообщение Anonymous »

контекст
Я начал с этого электронного приложения, предоставленного Microsoft-https://github.com/azuread/microsoft-au ... brary-for- js/tree/dev/samples/msal-node-samples/electronsystembrowsertestapp.
Вы можете прочитать чтение Приложение для получения более подробной информации. Он инициализирует PublicClientApplication с идентификатором клиента и полномочиями, связанными с Azure Enterprise. Затем он вызывает AccureTokenInteractive с пользовательским IloopbackClient, чтобы принести код Authz и впоследствии токен. Клиентский сервер Loopback работает на LocalHost, поэтому требуется, чтобы URI перенаправления в приложении было http: // localhost.
Проблема
i Слышал, что не рекомендуется использовать http: // localhost в качестве перенаправления, поэтому я пытаюсь адаптировать приведенный выше подход для использования пользовательского протокола (например, msal
: // auth) в качестве перенаправить uri. < /p>
Я сталкиваюсь с проблемами. В частности, когда поток получает код authz и вызывает мой пользовательский протокол, он не работает. /p>
текущий код < /strong>
Вот что у меня есть до сих пор. Я ожидаю, что призыв к моему пользовательскому протоколу достигнет успеха, так как я настроил обработчик для этой схемы для разрешения кода Authz. Любое руководство будет очень оценено!// AuthProvider.js
const { PublicClientApplication } = require('@azure/msal-node');
const { shell } = require('electron');
const CustomLoopbackClient = require('./CustomLoopbackClient');

class AuthProvider {
msalConfig;
clientApplication;
account;
cache;

constructor(msalConfig) {
this.msalConfig = msalConfig;
this.clientApplication = new PublicClientApplication(this.msalConfig);
this.cache = this.clientApplication.getTokenCache();
this.account = null;
}

async login() {
const authResponse = await this.getTokenInteractive();
console.log(authResponse);

return this.handleResponse(authResponse);
}

async getTokenInteractive() {
const customLoopbackClient = new CustomLoopbackClient();
const openBrowser = async (url) => {
await shell.openExternal(url);
};
const interactiveRequest = {
scopes: [],
openBrowser,
loopbackClient: customLoopbackClient, // overrides default loopback client
};

const authResponse = await this.clientApplication.acquireTokenInteractive(interactiveRequest);
return authResponse;
}
}

module.exports = AuthProvider;
< /code>
const { protocol } = require('electron');

class CustomLoopbackClient {
async listenForAuthCode() {
const authCodeListener = new Promise(
(resolve, reject) => {
protocol.handle("msal", (req, callback) => {
const requestUrl = new URL(req.url);
const authCode = requestUrl.searchParams.get("code");
if (authCode) {
resolve(authCode);
} else {
protocol.unhandle("msal");
reject(new Error("No code found in URL"));
}
});
}
);

return authCodeListener;
}

getRedirectUri() { return "msal://auth"; }

closeServer() { protocol.unhandle("msal"); }
}

module.exports = CustomLoopbackClient;
< /code>
// main.js
const path = require("path");
const { app, BrowserWindow, ipcMain } = require('electron/main')
const AuthProvider = require("./AuthProvider");

let win;
let authProvider;
const msalConfig = {
auth: {
clientId: "",
authority: "https://login.microsoftonline.com/",
redirectUri: "msal://auth"
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: true
}
}

const createWindow = () => {
win = new BrowserWindow({
title: 'Test App',
width: 800,
height: 600,
webPreferences: {
contextIsolation: true,
nodeIntegration: true,
}
});

authProvider = new AuthProvider(msalConfig);

win.webContents.openDevTools();
win.loadFile(path.join(__dirname, "./app/build/index.html"));
}

app.whenReady().then(() => {
createWindow();
});
< /code>
Как связанный вопрос, существует ли проблема с использованием Localhost в качестве uri Redirect для настольного приложения? Спасибо!


Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-electr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»