Как настроить ADALv3 для поддержки переключения между идентификаторами пользователей... аналогично Gmail?
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>