Kontext
Ich habe mit dieser Elektronen-App von Microsoft-https://github.com/azuread/microsoft-au ... brary-for- gestartet JS/Tree/Dev/Proben/MSAL-Knoten-Samples/ElectronSystemBrowStestApp.
Sie können die Readme lesen Von der App für weitere Details. < /p>
Insgesamt verwendet die App die MSAL-Knoten-Bibliothek. Es initialisiert eine PublicClientApplication mit einer Kunden -ID und einer Behörde, die mit einer Azure Enterprise -Anwendung verbunden ist. Anschließend erfolgt AcquireTokenInteractive mit einem benutzerdefinierten IloopbackClient, um den Authz -Code und anschließend den Token zu holen. Der Loopback -Client -Server wird auf Localhost ausgeführt, sodass die Umleitungs -URI in der App http: // localhost. Es wird nicht empfohlen, http: // localhost als Umleitung zu verwenden, daher versuche ich, den oben genannten Ansatz anzupassen, um ein benutzerdefiniertes Protokoll (z. B. Msal : // auth) als die zu verwenden Umleiten Sie URI. Wenn der Fluss den Authz -Code erwerbt und mein benutzerdefiniertes Protokoll aufruft, schlägt er insbesondere fehl. /p>
aktueller Code < /strong>
Hier ist was ich bisher habe. Ich würde erwarten, dass der Anruf in meinem benutzerdefinierten Protokoll erfolgreich ist, da ich einen Handler für dieses Schema konfiguriert habe, um den Authz -Code zu beheben. Jede Anleitung wäre sehr geschätzt!// 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>
Gibt es als verwandte Frage ein Problem, das Localhost als Umleitungs -URI für eine Desktop -App verwendet? Danke!
Melden Sie sich in der Azure Enterprise-Anwendung mit der @azure/msal-Knotenbibliothek mit Electron an ⇐ JavaScript
-
- Similar Topics
- Replies
- Views
- Last post