コード例 #1
0
        /// <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();
        }
コード例 #2
0
        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);
        }