/// <summary> /// Конструктор. /// </summary> /// <param name="resourceTitles">Ресурсы заголовков.</param> /// <param name="loginMethod">Способ входа в систему.</param> public ModIdentityServerWebMvcPartAccountCommonJobLoginOutput( ModIdentityServerBaseResourceTitles resourceTitles, ModIdentityServerBaseEnumLoginMethods loginMethod ) { LoginMethod = loginMethod; LoginMethodSelectListItems = new[] { new SelectListItem( resourceTitles.GetStringLoginMethodWindows(), ModIdentityServerBaseEnumLoginMethods.Windows.ToString(), LoginMethod == ModIdentityServerBaseEnumLoginMethods.Windows ), new SelectListItem( resourceTitles.GetStringLoginMethodLocal(), ModIdentityServerBaseEnumLoginMethods.Local.ToString(), LoginMethod == ModIdentityServerBaseEnumLoginMethods.Local ), new SelectListItem( resourceTitles.GetStringLoginMethodLdap(), ModIdentityServerBaseEnumLoginMethods.Ldap.ToString(), LoginMethod == ModIdentityServerBaseEnumLoginMethods.Ldap ) }; LoginMethodTitle = resourceTitles.GetStringLoginMethod(); }
private async Task <ModIdentityServerWebMvcPartAccountCommonJobLoginOutput> ProduceLogin( string returnUrl, ModIdentityServerBaseEnumLoginMethods loginMethod, IIdentityServerInteractionService interaction, IAuthenticationSchemeProvider schemeProvider, IClientStore clientStore ) { var context = await interaction.GetAuthorizationContextAsync(returnUrl) .CoreBaseExtTaskWithCurrentCulture(false); var result = new ModIdentityServerWebMvcPartAccountCommonJobLoginOutput(ResourceTitles, loginMethod) { ReturnUrl = returnUrl, Username = context?.LoginHint }; if (context?.IdP != null) { var scheme = await schemeProvider.GetSchemeAsync(context.IdP) .CoreBaseExtTaskWithCurrentCulture(false); if (scheme != null) { var local = context.IdP == IdentityServer4.IdentityServerConstants.LocalIdentityProvider; // this is meant to short circuit the UI and only trigger the one external IdP result.EnableLocalLogin = local; if (!local) { result.ExternalProviders = new[] { new ModIdentityServerWebMvcPartAccountExternalProvider { AuthenticationScheme = context.IdP } }; } } } else { var schemes = await schemeProvider.GetAllSchemesAsync() .CoreBaseExtTaskWithCurrentCulture(false); var providers = schemes.Where(x => x.DisplayName != null || x.Name.Equals(ConfigSettings.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase) ).Select(x => new ModIdentityServerWebMvcPartAccountExternalProvider { DisplayName = x.DisplayName, AuthenticationScheme = x.Name } ).ToList(); var allowLocal = true; if (context?.ClientId != null) { var client = await clientStore.FindEnabledClientByIdAsync(context.ClientId) .CoreBaseExtTaskWithCurrentCulture(false); if (client != null) { allowLocal = client.EnableLocalLogin; if (client.IdentityProviderRestrictions != null && client.IdentityProviderRestrictions.Any()) { providers = providers.Where( x => client.IdentityProviderRestrictions.Contains(x.AuthenticationScheme) ).ToList(); } } } result.AllowRememberLogin = ConfigSettings.AllowRememberLogin; result.EnableLocalLogin = allowLocal && ConfigSettings.AllowLocalLogin; result.ExternalProviders = providers.ToArray(); } return(result); }