В последнее время кажется, что Microsoft что-то изменила в поведении, когда люди пытаются войти в систему с помощью своей учетной записи Microsoft через наши службы.
У нас есть настройка, в которой мы используем IdentityServer4 и Azure AD для учетных записей Microsoft,Когда люди пытаются войти в систему сейчас, они просто нажимают кнопку входа на нашей веб-странице и переходят на страницу входа Microsoft.Здесь кажется, что Microsoft автоматически выбирает уже вошедшего в систему пользователя и просто выполняет вход в систему.
Это приводит к двум проблемам.
- Пользователю трудно понять, что его учетная запись просто автоматически выбирается.
- Если пользователь достаточно быстр, он может щелкнуть своего пользователя, и это посылает два обратных вызова на наш сервер, и возникает состояние гонки, что приводит к
OperationCancelledException
половине времени.
Наша установка очень похожа на приведенную в качестве примера на IdentityServer4s. Краткое руководство:
serviceCollection
.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddMicrosoftAccount("Microsoft", "Microsoft", o =>
{
o.SignInScheme = IdentityConstants.ExternalScheme;
o.ClientId = _externalKeysOptions.MicrosoftClientId;
o.ClientSecret = _externalKeysOptions.MicrosoftClientSecret;
o.CallbackPath = new PathString("/signin-microsoft");
new[]
{
"offline_access",
"Calendars.Read.Shared",
"Calendars.ReadWrite",
"Tasks.Readwrite"
}.ForEach(scope => o.Scope.Add(scope));
o.SaveTokens = true;
})
Мы настраиваем схемы аутентификации, как указано выше.И затем мы делаем нормальный вызов против поставщика:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[Route("externallogin")]
public IActionResult ExternalLogin(ExternalLoginModel model)
{
var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { model.ReturnUrl, termsOfServiceAccepted = model.AgreeToTerms, platform = model.Platform });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(model.Provider, redirectUrl);
return Challenge(properties, model.Provider);
}
Кто-нибудь знает, почему это происходит.Я действительно хотел бы отключить этот автоматический выбор учетной записи пользователей, когда они используют логин Microsoft.Потому что это больше сбивает с толку наших клиентов, чем помогает им.
Любые ресурсы приветствуются.Заранее спасибо.