Запустите инструмент пользователя Visual Studio во время изготовления

Во-первых, важно отметить, что сбор имени пользователя и пароля для пользователя Azure AD как части вашего приложения (функция Azure или веб-приложение, любое другое разрабатываемое вами приложение) в значительной степени противоречит передовым методам и открывает множество атак. риски. Поэтому, даже несмотря на то, что вы можете использовать обходные пути для его достижения, пожалуйста, пересмотрите требование, которое вы предъявляете с точки зрения безопасности.

Обходной путь - ROPC - Предоставление учетных данных пароля владельца ресурса (не рекомендуется, несколько проблем)

Azure AD не предоставляет прямой API для проверки учетных данных пользователя. В качестве обходного пути (и при этом плохого) вы можете использовать поток «Учетные данные пароля владельца ресурса» (ROPC) , который работает с именем пользователя и паролем для получения токена.

Это нарушает лучшие практики безопасности, а также не работает с пользователями MFA и федеративной аутентификации . Использование этого гранта крайне нежелательно, так как это создает потенциальные риски атаки, поэтому не рекомендуется.

Если имя пользователя или пароль неверны, вы получите исключение, в противном случае вы получите верный токен, который означает, что учетные данные хороши.

Вот несколько ссылок, которые охватывают детали ROPC (и рекомендуют не использовать его одновременно ..):

Например, код будет выглядеть так для собственного приложения. [1113 ]

result = await context.AcquireTokenAsync(resource, clientId, new UserPasswordCredential("john@contoso.com", johnsPassword));

Другие ссылки

  • Здесь старая статья, но все еще очень подробная. И посмотрите на длинный список ограничений в конце.

24
задан Peter Mortensen 5 September 2010 в 11:45
поделиться

3 ответа

К сожалению, я не думаю, что есть простой способ сделать это. Пользовательские инструменты сборки запускаются только из VS.NET - они не запускаются, когда вы строите свой проект с помощью MSBuild из командной строки.

В общем, если у вас есть выбор написать инструмент сборки как инструмент сборки клиента или затем выберите задачу MSBuild каждый раз, поскольку эти задачи будут выполняться в VS.NET и из командной строки.

Файлы designer.cs для ресурсов предназначены для поддержки вашего кодирования. Они предоставляют строго типизированный доступ к файлу ресурсов. Итак, пока вы создаете ресурсы, инвариантные для вашей культуры в VS.NET (и позволяете ему создавать файлы .designer.cs), добавление дополнительной языковой поддержки позже (дополнительные файлы .resx) должно работать нормально.

Если, однако, ваши текстовые файлы являются вашими основными файлами ресурсов, и вы сначала добавляете новые строки ресурсов в эти текстовые файлы, затем вам нужно будет найти другой способ создания файлов .cs, который позволит вам кодировать для этих ресурсов. Если бы вам пришлось, создать файл .designer.cs самостоятельно (или что-то подобное) было бы не так сложно. Используя CodeDom или T4, вы можете создать вспомогательный класс, используя существующий файл .designer.cs в качестве шаблона.

3
ответ дан 29 November 2019 в 00:30
поделиться

Существует способ создать * .Designer.cs для * .resx как часть процесса сборки. Существует встроенная задача MSBuild GenerateResource , которая по сути является оберткой вокруг инструмента SDK resgen.exe. Здесь вы можете найти пример, как его использовать.

Еще одна вещь, которая может оказаться полезной, если сгенерированная версия * .Designer.cs не является правильной, в основном задача GenerateResource не вызывает нужную версию resgen.exe, установка свойства SdkToolsPath может помочь вам .

2
ответ дан 29 November 2019 в 00:30
поделиться

Пробовали ли вы добавить шаг Exec в шаг Before / AfterBuild в вашем csproj? Для этого вы должны вручную отредактировать файл, но это должно решить вашу проблему.

Я не совсем понимаю, хотите ли вы, чтобы это было сделано до или после сборки. Если вам нужно это сделать где-то после Pass1 / Pass2, вы можете напрямую подключиться к целям. Попробуйте заглянуть в Microsoft.Build.Common.Targets, чтобы понять, как это сделать.

0
ответ дан 29 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: