Безопасно ли интегрироваться с онлайн-API SharePoint через консольное приложение, размещенное на локальной виртуальной машине?

У меня есть приведенное ниже консольное приложение, которое интегрируется с SharePoint Online. консольное приложение размещается на локальной виртуальной машине и проходит проверку подлинности в SharePoint с использованием ClientId, TenantID и сертификата, как показано ниже:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PnP.Core.Auth;
using PnP.Core.Model.SharePoint;
using PnP.Core.Model.Teams;
using PnP.Core.QueryModel;
using PnP.Core.Services;
using PnP.Core.Services.Builder.Configuration;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;
using static Microsoft.ApplicationInsights.MetricDimensionNames.TelemetryContext;
using static System.Net.Mime.MediaTypeNames;

namespace ConsoleApp4
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var tenantId = "b***c";
            var clientId = "7*****9";
            var certificatePath = @"c:\CERT\SPDashBoardIntegration.pfx";
            var certificatePassword = "***";

            // Initialize a new service collection
            var serviceCollection = new ServiceCollection();

            // Load the certificate
            var certificate = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.Exportable);

            // Configure logging
            serviceCollection.AddLogging(builder =>
            {
                builder.AddConsole();
            });

            // Add and configure PnP Core SDK
            serviceCollection.AddPnPCore(options =>
            {
                options.PnPContext.GraphFirst = true; // Set true if you prefer to use Graph over CSOM when possible
                                                      // options.HttpRequests.UserAgent = "ISV|Contoso|ProductX";
                options.Sites.Add("SiteToWorkWith", new PnPCoreSiteOptions
                {
                    SiteUrl = "https://********.sharepoint.com/sites/********-******",
                    AuthenticationProvider = new X509CertificateAuthenticationProvider(clientId, tenantId, certificate)
                });
            });
        int i = 0;
        // Build the service provider
        var serviceProvider = serviceCollection.BuildServiceProvider();

        // Use the service provider to get the IPnPContextFactory instance
        var pnpContextFactory = serviceProvider.GetRequiredService<IPnPContextFactory>();

        // Now you can use the IPnPContextFactory to get a PnPContext and perform operations
        var context = await pnpContextFactory.CreateAsync("SiteToWorkWith");
        // Assume the fields where not yet loaded, so loading them with the list
        var workOrderList = context.Web.Lists.GetByTitle("Work Orders", p => p.Title,
                                                             p => p.Fields.QueryProperties(p => p.InternalName,
                                                                                           p => p.FieldTypeKind,
                                                                                           p => p.TypeAsString,
                                                                                           p => p.Title));

Теперь мой вопрос: является ли это безопасным подходом? Я имею в виду, когда виртуальная машина отправляет ClientID, секрет клиента и сертификат в SharePoint Online, будет ли эта информация в безопасности в сети? я имею в виду, будет ли консольное приложение безопасно взаимодействовать с SharePoint при отправке учетных данных (ClientID, секрет клиента и сертификат)? Если нет, то как мы можем это обеспечить?

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предоставленный код можно улучшить с точки зрения безопасности, используя управляемое удостоверение Azure Active Directory (AAD) для виртуальной машины вместо хранения учетных данных сертификата непосредственно в коде. Вот как можно изменить код:

  1. Удалить учетные данные сертификата:

Удалите строки, определяющие tenantId, clientId, certificatePath и certificatePassword.

  1. Настройте управляемое удостоверение AAD:

Включите управляемое удостоверение для локальной виртуальной машины, следуя инструкциям Microsoft https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview. Назначьте необходимые разрешения (например, Sites.Manage.All) управляемому удостоверению при регистрации приложения Azure AD для доступа к SharePoint Online. 3. Обновите конфигурацию ядра PnP:

Измените раздел serviceCollection.AddPnPCore, чтобы использовать AzureADAuthenticationProvider вместо X509CertificateAuthenticationProvider.

в вопросе не говорится, что виртуальная машина размещена в Azure

Yehor Androsov 01.04.2024 13:38

это то, что я предполагаю. хотя может быть и не так

Sigar Dave 01.04.2024 13:45

@SigarDave да, виртуальная машина размещается локально... так будет ли безопасна связь между виртуальной машиной (консольным приложением) и онлайн-API SharePoint? будут ли секрет клиента, идентификатор клиента и сертификат зашифрованы в сети?

microsoftdeveloperdesigner 02.04.2024 03:30

@YehorAndrosov спасибо за ответ. да, виртуальная машина размещается локально, а не в Azure... так безопасен ли мой подход в отношении шифрования данных, когда они отправляются из консольного приложения в SharePoint онлайн?

microsoftdeveloperdesigner 02.04.2024 03:31

@SigarDave спасибо за ваш совет, но я спрашиваю о моем нынешнем подходе: будет ли информация, в основном идентификатор клиента, идентификатор клиента, пароль сертификата, зашифрована, когда они будут отправлены в SharePoint Online API?

microsoftdeveloperdesigner 02.04.2024 03:45

Нет, clientID, tenantID и пароль сертификата не шифруются при прямой отправке в SharePoint Online API с локальной виртуальной машины.

Sigar Dave 08.04.2024 12:55
Ответ принят как подходящий

TLS используется для шифрования данных при передаче. Многие службы Azure начали отказываться от поддержки TLS 1.0 и 1.1 в пользу TLS 1.2+. Вызов этих служб выдаст сообщение «Запрос был прерван: не удалось создать безопасный канал SSL/TLS», если ваше приложение и виртуальная машина неправильно настроены для безопасных соединений.

Подготовка к TLS 1.2 в Office 365

Я думаю, вам нужно больше сосредоточиться на установке обновлений безопасности на вашей виртуальной машине и сохранении в секрете учетных данных, которые вы используете для подключения к вашей виртуальной машине. Благодаря этим подходам ваши учетные данные Sharepoint находятся в достаточной безопасности.

спасибо за ответ, во время тестирования приложения я могу без проблем запустить его в Visual Studio на своем ноутбуке с Windows 10.. так что я думаю, что на виртуальной машине все должно быть хорошо

microsoftdeveloperdesigner 02.04.2024 14:15

Другие вопросы по теме

Ошибка DI консольного приложения .NET 8 «Невозможно разрешить службу для типа Microsoft.Extensions.Logging.ILoggerFactory»
Я пытаюсь написать простую программу, которая выбирает случайное число от 1 до 10 и дает пользователю возможность его угадать
Доступ к элементам внедрения зависимостей, таким как IConfiguration, из вложенного класса в консольном приложении Core
Консольное приложение Win32 неожиданно завершает работу с кодом 58
Игра жизни Конвея: неожиданное поведение
Невозможно создать настройку EF Core и создать миграцию в новом консольном приложении .NET Core
Утечка памяти, вызванная Рослин, как мне ее сдержать?
Невозможно добавить ведение журнала в мое консольное приложение asp.net core8.0. «ILoggingBuilder» не содержит определения для «AddConsole»
Определите вызывающую сторону ILogger и Logger<Type> с помощью специального класса ILogger
Syncfusion XlsIO: попытка вставить список изображений из папки в каждую строку. То же изображение показано