контекст
Я начал с этого электронного приложения, предоставленного 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
Войдите в Azure Enterprise Applicate с библиотекой @Azure/MSAL Node с помощью электрона ⇐ Javascript
Форум по Javascript
1740365948
Anonymous
[b] контекст [/b]
Я начал с этого электронного приложения, предоставленного Microsoft-https://github.com/azuread/microsoft-authentication-library-for- js/tree/dev/samples/msal-node-samples/electronsystembrowsertestapp.
Вы можете прочитать чтение Приложение для получения более подробной информации. Он инициализирует PublicClientApplication с идентификатором клиента и полномочиями, связанными с Azure Enterprise. Затем он вызывает AccureTokenInteractive с пользовательским IloopbackClient, чтобы принести код Authz и впоследствии токен. Клиентский сервер Loopback работает на LocalHost, поэтому требуется, чтобы URI перенаправления в приложении было http: // localhost.
[b] Проблема [/b]
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 для настольного приложения? Спасибо!
Подробнее здесь: [url]https://stackoverflow.com/questions/79462368/log-into-azure-enterprise-application-with-azure-msal-node-library-using-electr[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия