На MSAL.NET на сервере есть ли способ предоставить подсказку домена для единого входа?

#c# #azure-active-directory #msal

#c# #azure-active-directory #msal

Вопрос:

Просматривая веб-страницы, я вижу, что если сайт использует MSAL.js, разработчик сайта может предоставить подсказки домена, чтобы, когда пользователь начинает входить в систему, ему не предлагалось «Выбрать учетную запись» на сайте входа Microsoft, а вместо этого библиотека выбирала для них учетную запись, обеспечивая лучший единый вход. Есть ли какой-либо способ предоставить подсказку домена (или иным образом избежать необходимости запроса «выбрать учетную запись») при использовании MSAL.NET в приложении C #?

Я использую MSAL.NET для аутентификации в Azure AD через Open ID Connect.

Ответ №1:

Нашел это. В ConfigureServices(IServiceCollection) добавьте обработчик событий для OnRedirectToIdentityProvider.

 var events = new OpenIdConnectEvents()
{
    OnRedirectToIdentityProvider = context =>
    {
        context.ProtocolMessage.DomainHint = "mydomain.com";
        return Task.CompletedTask;
    },
}
services.Configure<OpenIdConnectOptions>(
    AzureADDefaults.OpenIdScheme,
    options =>
    {
        // ...
        options.Events = events;
    }
);
  

Комментарии:

1. AzureADDefaults теперь устарел. Ищете новый способ сделать это, если у вас есть какие-либо идеи!

Ответ №2:

Используйте параметры withextraqueryparameters для передачи login_hint и domain_hint

  IPublicClientApplication app = PublicClientApplicationBuilder.Create(appConfiguration.ClientId)
                                                    .WithAuthority(authority)
                                                    .WithRedirectUri(appConfiguration.RedirectUri)
                                                    .WithExtraQueryParameters("login_hint=myusername@mydomain.com")
                                                    .Build();
  

Комментарии:

1. У меня нигде нет этого конструктора. В моем ASP.NET приложение, которое у меня есть, var builder = WebApplication.CreateBuilder(args); и позже я вызываю builder.Services.AddMsalAuthentication(...). , ничего подобного выше. У вас есть еще какие-либо сведения о том, как я мог бы это использовать?