Как настроить ADALv3 для поддержки переключения между идентификаторами пользователей... аналогично Gmail?

Я работаю с ADALv3 с Azure AD и хочу, чтобы мое приложение ASP.NET MVC (и приложение Xamarin) поддерживало переключение между различными пользователями Azure AD.

Как настроить Azure AD для поддержки переключения пользователей, как показано ниже:

введите описание изображения здесь

1 ответ

ADAL не предоставляет такой функции, мы должны реализовать ее сами.

Например, чтобы достичь этой цели в MVC, мы можем сохранить имя пользователя логина в куки. Затем мы можем переключать пользователей, указав параметр login_hint=userName, Нам нужно изменить SignIn метод независимо от того, вошли ли пользователи, как показано ниже:

public void SignIn(string userName)
{          
    HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
}

И мы можем добавить login_hint параметр через обычай RedirectToIdentityProvider из OpenIdConnectAuthenticationNotifications:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = clientId,
        Authority = authority,
        PostLogoutRedirectUri = postLogoutRedirectUri,
        RedirectUri = postLogoutRedirectUri,
        Notifications = new OpenIdConnectAuthenticationNotifications
        {

            RedirectToIdentityProvider=context=>
            {

                var userName = context.Request.Query.Get("userName");
                context.ProtocolMessage.Parameters.Add("login_hint", userName);
                return Task.FromResult(0);
            }
        },       
    });

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

<li>@Html.ActionLink("Sign in-user1", "SignIn", "Account", routeValues: new { userName = "user1@xxxx.onmicrosoft.com" }, htmlAttributes: new { id = "loginLink" })</li>
<li>@Html.ActionLink("Sign in-user2", "SignIn", "Account", routeValues: new { userName = "user2@xxxx.onmicrosoft.com" }, htmlAttributes: new { id = "loginLink" })</li>
Другие вопросы по тегам