private async Task <SignInViewModel> CreateSigninModelAsync(string returnUrl) { var context = await interactions.GetAuthorizationContextAsync(returnUrl); if (null != context?.IdP) { return(new SignInViewModel { EnableLocalLogin = false, ReturnUrl = returnUrl, Email = context.LoginHint, ExternalProviders = { new ExternalProvider { AuthenticationScheme = context.IdP } } }); } var schemes = await schemeProvider.GetAllSchemesAsync(); var comparer = StringComparer.OrdinalIgnoreCase; var condition = new Func <AuthenticationScheme, bool>(scheme => null != scheme.DisplayName || comparer.Equals(scheme.Name, AccountOptions.WindowsAuthenticationScheme) ); var canSigninLocal = true; var providers = schemes .Where(condition) .Select(scheme => new ExternalProvider { DisplayName = scheme.DisplayName, AuthenticationScheme = scheme.Name }) .ToArray(); if (null != context?.ClientId) { var client = await clientStore.FindEnabledClientByIdAsync(context.ClientId); if (null != client) { canSigninLocal = client.EnableLocalLogin; if (null != client.IdentityProviderRestrictions && client.IdentityProviderRestrictions.Any()) { providers = providers .Where(provider => client.IdentityProviderRestrictions.Contains(provider.AuthenticationScheme) ) .ToArray(); } } } captcha.Create(HttpContext); return(new SignInViewModel { AllowRememberMe = AccountOptions.AllowRememberMe, EnableLocalLogin = canSigninLocal && AccountOptions.AllowLocalLogin, ReturnUrl = returnUrl, Email = context?.LoginHint, ExternalProviders = providers }); }