Параметры безопасности Azure по умолчанию и Power BI Embedded

Всякий раз, когда я пытаюсь войти в Outlook, Power BI или Azure, я постоянно получаю всплывающее окно с сообщением о том, что параметры безопасности по умолчанию будут включены для всей организации через x дней (сейчас это происходит через 2 дня). Нет возможности отключить его.

Я знаю, что его можно отключить в MS Entra в Azure. Но он уже отключен. Когда он будет автоматически включен, смогу ли я снова его выключить? (Я администратор клиента). Мы используем основную учетную запись для создания токенов доступа, которые будут использоваться для вызова API/SDK Power BI Embedded. Будут ли настройки безопасности по умолчанию вызывать проблемы с ним, если он включен?

Код:

                IPublicClientApplication clientApp = PublicClientApplicationBuilder
                                                                    .Create(ConfigValidatorService.ApplicationId)
                                                                    .WithAuthority(m_authorityUrl)
                                                                    .Build();
                var userAccounts = await clientApp.GetAccountsAsync();

                SecureString secureStringPassword = new SecureString();
                    foreach (var key in ConfigValidatorService.Password)
                    {
                        secureStringPassword.AppendChar(key);
                    }
                    AuthenticationResult authenticationResult = await clientApp.AcquireTokenByUsernamePassword(m_scope, ConfigValidatorService.Username, secureStringPassword).ExecuteAsync();
                    

Редактировать:

Я изменю код, чтобы вместо этого использовать субъект-службу.

IConfidentialClientApplication clientApp = ConfidentialClientApplicationBuilder
                                                                                .Create(ConfigValidatorService.ApplicationId)
                                                                                .WithClientSecret(ConfigValidatorService.ApplicationSecret)
                                                                                .WithAuthority(tenantSpecificURL)
                                                                                .Build();

var authenticationResult = await clientApp.AcquireTokenForClient(m_scope).ExecuteAsync();

Можете ли вы также указать, как вы генерируете токен доступа?

Rukmini 27.05.2024 08:34

Конечно. Добавим код в вопрос.

CSharp 27.05.2024 08:39
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратите внимание: Клиенты периодически уведомляются об автоматической активации настроек безопасности по умолчанию, если они:

  • Не используйте какие-либо политики условного доступа.
  • Не иметь премиум-лицензий.
  • Не активно используете устаревшие клиенты аутентификации.

Настройки безопасности по умолчанию заставляют всех пользователей в организации регистрироваться для многофакторной аутентификации, и если вы не хотите использовать MFA, вам необходимо отключить его в Microsoft Entra Portal:

Если включена безопасность по умолчанию, AcquireTokenByUsernamePassword выдаст ошибку при создании токена доступа, поскольку этот поток не поддерживает учетные записи с поддержкой MFA.

Если включены настройки безопасности по умолчанию (включен MFA), при использовании AcquireTokenByUsernamePassword вы получите сообщение об ошибке, как показано ниже:

public class AuthService
{
    private static string m_authorityUrl = "https://login.microsoftonline.com/TenantID";
    private static string[] m_scope = new string[] { "https://analysis.windows.net/powerbi/api/.default" };

    public async Task AuthenticateUserAsync()
    {
        IPublicClientApplication clientApp = PublicClientApplicationBuilder
                                                .Create(ConfigValidatorService.ApplicationId)
                                                .WithAuthority(m_authorityUrl)
                                                .Build();

        var userAccounts = await clientApp.GetAccountsAsync();

        SecureString secureStringPassword = new SecureString();
        foreach (var key in ConfigValidatorService.Password)
        {
            secureStringPassword.AppendChar(key);
        }

        AuthenticationResult authenticationResult = await clientApp.AcquireTokenByUsernamePassword(m_scope, ConfigValidatorService.Username, secureStringPassword).ExecuteAsync();

        Console.WriteLine($"Access Token: {authenticationResult.AccessToken}");
    }
}

public static class ConfigValidatorService
{
    public static string ApplicationId = "ClientID";
    public static string Username = "[email protected]";
    public static string Password = "Password";
}
public class Program
{
    public static async Task Main(string[] args)
    {
        AuthService authService = new AuthService();
        await authService.AuthenticateUserAsync();
    }
}

Следовательно, вам нужно либо отключить настройки безопасности по умолчанию, либо переключиться на любой другой поток аутентификации для создания токена доступа.

Если параметры безопасности по умолчанию включены, используйте приведенный ниже код, который использует поток AcquireTokenInteractive:

public class AuthService
{
    private static string m_authorityUrl = "https://login.microsoftonline.com/TenantID";
    private static string[] m_scope = new string[] { "https://analysis.windows.net/powerbi/api/.default" };

    public async Task AuthenticateUserAsync()
    {
        IPublicClientApplication clientApp = PublicClientApplicationBuilder
                                                .Create(ConfigValidatorService.ApplicationId)
                                                .WithAuthority(m_authorityUrl)
                                                .WithDefaultRedirectUri()
                                                .Build();

        AuthenticationResult authenticationResult = null;

        try
        {
            authenticationResult = await clientApp.AcquireTokenInteractive(m_scope).ExecuteAsync();
        }
        catch (MsalException ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
            return;
        }

       Console.WriteLine($"Access Token: {authenticationResult.AccessToken}");
    }
}

public static class ConfigValidatorService
{
    public static string ApplicationId = "ClientID";
}

public class Program
{
    public static async Task Main(string[] args)
    {
        AuthService authService = new AuthService();
        await authService.AuthenticateUserAsync();
    }
}

Ссылка:

Обеспечение уровня безопасности по умолчанию в Microsoft Entra ID - Microsoft Entra | Майкрософт

Спасибо. Я отключу настройки безопасности по умолчанию, если они будут включены на данный момент. Я изменю код, чтобы использовать субъект-службу вместо основной учетной записи для всех клиентов, чтобы в будущем, даже если будут включены параметры безопасности по умолчанию, код работал. (IConfidentialClientApplication вместо IPublicClientApplication)

CSharp 27.05.2024 14:14

Да, даже IConfidentialClientApplication также работает, если вы хотите использовать принципала службы

Rukmini 27.05.2024 14:16

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

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

Управление API. ошибка в бицепсе при настройке бэкенда
Как изменить оценку поиска Azure AI по умолчанию, чтобы она увеличивалась при точном обнаружении всего поискового запроса?
Невозможно пройти аутентификацию с помощью единого входа между несколькими веб-приложениями с помощью Azure B2C и MSAL.js Angular
Внешний идентификатор Entra с идентификатором Microsoft, выдающим AADTS500208, если пользователь не является глобальным администратором
Невозможно найти VirtualNetwork при развертывании службы приложений в другой группе ресурсов в Bicep
Доступ к API Azure Service Manager из приложения-функции
Копирование файлов на основе имени файла подстановочного знака; из SFTP в хранилище BLOB-объектов — Фабрика данных Azure — Действие копирования
Terraform создает массив/список из числа и переменной с несколькими элементами
Невозможно распечатать/использовать выходные данные сообщения служебной шины Azure, хранящиеся как System.Collections.Hashtable
Как использовать псевдоним таблицы в запросе KQL