Всякий раз, когда я пытаюсь войти в 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();
Конечно. Добавим код в вопрос.


Обратите внимание: Клиенты периодически уведомляются об автоматической активации настроек безопасности по умолчанию, если они:
Настройки безопасности по умолчанию заставляют всех пользователей в организации регистрироваться для многофакторной аутентификации, и если вы не хотите использовать 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)
Да, даже IConfidentialClientApplication также работает, если вы хотите использовать принципала службы
Можете ли вы также указать, как вы генерируете токен доступа?