private async Task <LoginViewModel> BuildLoginViewModelAsync(string returnUrl) { var context = await InteractionService.GetAuthorizationContextAsync(returnUrl); if (context?.IdP != null) { var local = context.IdP == IdentityServerConstants.LocalIdentityProvider; var vm = new LoginViewModel { EnableLocalLogin = local, ReturnUrl = returnUrl, UserName = context?.LoginHint, }; if (!local) { vm.ExternalProviders = new[] { new ExternalProvider { AuthenticationScheme = context.IdP } }; } return(vm); } var schemes = await AuthenticationSchemeProvider.GetAllSchemesAsync(); var providers = schemes .Where(x => x.DisplayName != null || (x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) ) .Select(x => new ExternalProvider { DisplayName = x.DisplayName, AuthenticationScheme = x.Name }).ToList(); var allowLocal = true; if (context?.ClientId != null) { //var client = await _clientStore.FindEnabledClientByIdAsync( context.ClientId ); //if( client != null ) { // allowLocal = client.EnableLocalLogin; // if( client.IdentityProviderRestrictions != null && client.IdentityProviderRestrictions.Any() ) { // providers = providers.Where( provider => client.IdentityProviderRestrictions.Contains( provider.AuthenticationScheme ) ).ToList(); // } //} } return(new LoginViewModel { AllowRemember = AccountOptions.AllowRemember, EnableLocalLogin = allowLocal && AccountOptions.AllowLocalLogin, ReturnUrl = returnUrl, UserName = context?.LoginHint, ExternalProviders = providers.ToArray() }); }
public async Task <string> GetAuthenticationScheme() { var schemeHandlers = await AuthenticationSchemeProvider.GetAllSchemesAsync(); foreach (var scheme in schemeHandlers) { var authResult = await HttpContext.AuthenticateAsync(scheme.Name); if (authResult.Succeeded) { return(scheme.Name); } } return(null); }