Использование набора средств Microsoft Graph с Electron
В этой статье описывается, как с помощью microsoft Graph Toolkit создать приложение Electron и подключить его к Microsoft 365. После выполнения этих действий у вас будет приложение Electron, в которое будут отображаться предстоящие встречи текущего пользователя, выполнившего вход из Microsoft 365.
Создание приложения Electron
Формирование нового приложения Electron с помощью Electron Forge. Это создает новое приложение Electron в TypeScript, которое помогает писать более надежный код и избежать ошибок среды выполнения.
npm init electron-app@latest mgt-app -- --template=webpack-typescript
Измените рабочий каталог на только что созданное приложение.
cd mgt-app
Подтвердите, что вы можете запустить приложение.
npm start
package.json
Откройте файл и убедитесь, что версия зависимости electron dev имеет значение 28.2.4
.
28.2.4
— это текущая максимальная версия для одноранговой зависимости, требуемой @microsoft/mgt-electron-provider
для .
Установите пакет @microsoft/mgt-components, содержащий все веб-компоненты, подключенные к Microsoft Graph.
npm i @microsoft/mgt-components
@microsoft/mgt-electron-provider
Также установите пакеты и @microsoft/mgt-element
npm. Они позволяют обеспечить проверку подлинности приложения с помощью MSAL и использовать компоненты Microsoft Graph Toolkit.
npm i @microsoft/mgt-element @microsoft/mgt-electron-provider
Создание идентификатора клиента/приложения
Добавление новой регистрации приложения в Microsoft Entra ID для получения идентификатора клиента
Чтобы создать приложение в Microsoft Entra ID, необходимо добавить новую регистрацию приложения, а затем настроить имя приложения и URI перенаправления.
Чтобы создать приложение в Microsoft Entra ID:
- Перейдите к Центр администрирования Microsoft Entra.
- Разверните узел Удостоверение>Разверните узел Приложения> выберите Регистрация приложений.
- В верхнем меню нажмите кнопку Новая регистрация.
- Введите имя приложения; например,
My Electron-App
. - Для типа поддерживаемых типов учетных записей выберите Учетные записи в любом каталоге организации (любой каталог Microsoft Entra — мультитенантный) и личные учетные записи Майкрософт (например, Skype, Xbox).
- В поле URI перенаправления в раскрывающемся списке выберите Общедоступный клиент или собственный (мобильный & desktop) и в поле URL-адрес введите
msal://redirect
. - Подтвердите изменения, нажав кнопку Зарегистрировать.
- Перейдите к регистрации приложения.
- Убедитесь, что вы находитесь на странице Обзор.
- В разделе Essentials скопируйте значение свойства Идентификатор приложения (клиента).
Настройка поставщика проверки подлинности Microsoft Graph Toolkit
Инициализация ContextBridge в скрипте предварительной загрузки
Начиная с Electron версии 12, изоляция контекста включена по умолчанию, и это рекомендуемый параметр безопасности для всех приложений. При изоляции контекста разработчики должны явно предоставлять API-интерфейсы из процесса main для использования в процессе отрисовщика через ContextBridge. Дополнительные сведения см. в разделе Изоляция контекста в документации electron.
Откройте файл src/preload.ts и добавьте следующий код:
import { type IpcRendererEvent, contextBridge, ipcRenderer } from 'electron';
import { AuthenticationProviderOptions } from '@microsoft/microsoft-graph-client';
contextBridge.exposeInMainWorld("main", {
electronProvider: {
mgtAuthState: (callback: (event: IpcRendererEvent, authState: string) => void) => ipcRenderer.on('mgtAuthState', callback),
token: (options?: AuthenticationProviderOptions) => ipcRenderer.invoke('token', options),
login: () => ipcRenderer.invoke('login'),
logout: () => ipcRenderer.invoke('logout'),
approvedScopes: (callback: (event: IpcRendererEvent, scopes: string[]) => void) => ipcRenderer.on('approvedScopes', callback),
},
});
Инициализация ElectronContextBridgeProvider в процессе отрисовщика
Отвечает ElectronContextBridgeProvider
за обмен данными с ElectronAuthenticator
(в процессе main) для запроса маркеров доступа и получения сведений о состоянии входа, необходимом для работы компонентов набора средств.
Чтобы использовать компоненты Microsoft Graph Toolkit в приложениях, они должны быть зарегистрированы в открываемом окне браузера. Для этого необходимо импортировать функции register для каждого компонента, который вы хотите использовать.
Чтобы инициализировать ElectronContextBridgeProvider
и зарегистрировать компоненты Microsoft Graph Toolkit, добавьте следующий код в файл src/renderer.ts .
import { Providers } from "@microsoft/mgt-element";
import { registerMgtAgendaComponent, registerMgtLoginComponent } from '@microsoft/mgt-components';
import {
type IContextBridgeImpl,
} from "@microsoft/mgt-electron-provider/dist/Provider";
import { ElectronContextBridgeProvider } from "@microsoft/mgt-electron-provider/dist/Provider/ElectronContextBridgeProvider";
// this provides typings for the object added to the renderer window by the preload script
declare global {
interface Window {
// can be named anything, like "electronApi"
main: {
electronProvider: IContextBridgeImpl;
};
}
}
// initialize the auth provider globally
const init = () => {
Providers.globalProvider = new ElectronContextBridgeProvider(window.main.electronProvider);
registerMgtLoginComponent();
registerMgtAgendaComponent();
};
init();
Инициализация ElectronAuthenticator в процессе main
Отвечает ElectronAuthenticator
за настройку переменных конфигурации для проверки подлинности MSAL, получение маркеров доступа и взаимодействие с ElectronContextBridgeProvider
. Инициализируется ElectronAuthenticator
в процессе main и настраивается переменные конфигурации, такие как идентификатор клиента и необходимые области.
Сначала откройте src/index.ts и импортируйте ElectronAuthenticator
и MsalElectronConfig
в @microsoft/mgt-electron-provider
верхней части страницы.
import {
ElectronAuthenticator,
MsalElectronConfig,
} from "@microsoft/mgt-electron-provider/dist/Authenticator";
Затем добавьте константу импорта COMMON_AUTHORITY_URL
.
import { COMMON_AUTHORITY_URL } from '@microsoft/mgt-electron-provider/dist/Authenticator/Constants';
Затем добавьте эти строки кода в функцию createWindow()
для инициализации ElectronAuthenticator сразу после mainWindow
объявления. Замените <your_client_id>
идентификатором клиента из регистрации приложения.
const config: MsalElectronConfig = {
clientId: "<your_client_id>",
authority: COMMON_AUTHORITY_URL, // Uses the common auth endpoint
mainWindow: mainWindow, //This is the BrowserWindow instance that requires authentication
scopes: [
"user.read",
"user.read",
"people.read",
"user.readbasic.all",
"contacts.read",
"presence.read.all",
"presence.read",
"user.read.all",
"calendars.read",
],
};
ElectronAuthenticator.initialize(config);
Добавление политики безопасности содержимого для разработки
Приложение, которое формирует шаблонов Electron Forge, включает политику безопасности содержимого (CSP) по умолчанию, которая запрещает получение данных с удаленного сервера. В целях разработки можно добавить CSP с высоким уровнем разрешений. Для рабочих приложений необходимо создать надежный поставщик служб CSP, который позволит приложению функционировать, уменьшая область атаки для злоумышленников.
Откройте файл forge.config.ts и замените существующий объект конфигурации, передаваемый конструктору WebpackPlugin, следующим объектом конфигурации.
{
mainConfig,
devContentSecurityPolicy: "default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;",
renderer: {
config: rendererConfig,
entryPoints: [
{
html: './src/index.html',
js: './src/renderer.ts',
name: 'main_window',
preload: {
js: './src/preload.ts',
},
},
],
},
}
Добавление компонентов на HTML-страницу
Добавьте содержимое в приложение. Теперь вы можете использовать компоненты набора средств Microsoft Graph на странице index.html и показывать повестку дня пользователя. Замените содержимое страницыindex.html следующим кодом.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World!</title>
</head>
<body>
<h1>❤️ Hello World! 🦒</h1>
<p>Welcome to your MGT Electron application.</p>
<mgt-login></mgt-login>
<mgt-agenda group-by-day></mgt-agenda>
</body>
</html>
Запуск приложения
npm start
Добавление возможностей кэширования маркеров в приложение и включение автоматического входа (дополнительно)
MSAL Node по умолчанию поддерживает кэш в памяти и предоставляет интерфейс ICachePlugin для сериализации кэша, но не предоставляет способ хранения кэша маркеров на диске по умолчанию. Если требуется постоянное хранилище кэша для включения автоматического входа или межплатформенного кэширования, рекомендуется использовать в качестве расширения реализацию по умолчанию, предоставляемую MSAL Node. Вы можете импортировать этот подключаемый модуль и передать экземпляр подключаемого модуля кэша при инициализации ElectronAuthenticator
.
let config: MsalElectronConfig = {
...
cachePlugin: new PersistenceCachePlugin(filePersistence) //filePersistence is the instance of type IPersistence that you will need to create
};
Дополнительные сведения о реализации этой функции см. в примере библиотеки проверки подлинности Майкрософт для js .
Связанные материалы
- Воспользуйтесь компонентами в интерактивной среде.
- Задайте вопрос в Microsoft Q&A.
- Сообщайте об ошибках и оставляйте запросы на создание функций в GitHub.