예제 #1
0
        private static void ValidateOptions()
        {
            // Load web root path from config
            if (string.IsNullOrWhiteSpace(Options.VirtualDirectory))
            {
                Options.VirtualDirectory = "/";
            }
            Options.VirtualDirectory = NormalizeUrl(Options.VirtualDirectory);
            // Set default options
            if (string.IsNullOrWhiteSpace(Options.ResponseType))
            {
                Options.ResponseType = "code";
            }
            if (string.IsNullOrWhiteSpace(Options.Scope))
            {
                Options.Scope = "openid";
            }
            if (string.IsNullOrWhiteSpace(Options.CallbackPath))
            {
                Options.CallbackPath = $"{Options.VirtualDirectory}/owin/security/keycloak/{Uri.EscapeDataString(Options.AuthenticationScheme)}/callback";
            }
            if (string.IsNullOrWhiteSpace(Options.PostLogoutRedirectUrl))
            {
                Options.PostLogoutRedirectUrl = Options.VirtualDirectory;
            }

            if (Options.SignInAsAuthenticationSchema == null)
            {
                try
                {
                    //Options.SignInAsAuthenticationType = App.GetDefaultSignInAsAuthenticationType();
                    Options.SignInAsAuthenticationSchema = "";
                }
                catch (Exception)
                {
                    Options.SignInAsAuthenticationSchema = "";
                }
            }

            // Switch composite options

            if (Options.EnableWebApiMode)
            {
                Options.EnableBearerTokenAuth = true;
                Options.ForceBearerTokenAuth  = true;
            }

            // Validate other options

            if (Options.ForceBearerTokenAuth && !Options.EnableBearerTokenAuth)
            {
                Options.EnableBearerTokenAuth = true;
            }

            Options.KeycloakUrl  = NormalizeUrl(Options.KeycloakUrl);
            Options.CallbackPath = NormalizeUrlPath(Options.CallbackPath);

            // Final parameter validation
            KeycloakIdentity.ValidateParameters(Options);
        }
        private void ValidateOptions()
        {
            // Check to ensure authentication type isn't already used
            var authType = Options.AuthenticationType;

            if (!Global.KeycloakOptionStore.TryAdd(authType, Options))
            {
                throw new Exception(
                          $"KeycloakAuthenticationOptions: Authentication type '{authType}' already used; required unique");
            }

            // Verify required options
            if (Options.KeycloakUrl == null)
            {
                ThrowOptionNotFound(nameof(Options.KeycloakUrl));
            }
            if (Options.Realm == null)
            {
                ThrowOptionNotFound(nameof(Options.Realm));
            }

            // Load web root path from config
            if (string.IsNullOrWhiteSpace(Options.VirtualDirectory))
            {
                Options.VirtualDirectory = "/";
            }
            Options.VirtualDirectory = NormalizeUrl(Options.VirtualDirectory);
            if (!Uri.IsWellFormedUriString(Options.VirtualDirectory, UriKind.Relative))
            {
                ThrowInvalidOption(nameof(Options.VirtualDirectory));
            }

            // Set default options
            if (string.IsNullOrWhiteSpace(Options.ResponseType))
            {
                Options.ResponseType = "code";
            }
            if (string.IsNullOrWhiteSpace(Options.Scope))
            {
                Options.Scope = "openid";
            }
            if (string.IsNullOrWhiteSpace(Options.CallbackPath))
            {
                Options.CallbackPath =
                    $"{Options.VirtualDirectory}/owin/security/keycloak/{Uri.EscapeDataString(Options.AuthenticationType)}/callback";
            }
            if (string.IsNullOrWhiteSpace(Options.PostLogoutRedirectUrl))
            {
                Options.PostLogoutRedirectUrl = Options.VirtualDirectory;
            }

            if (Options.SignInAsAuthenticationType == null)
            {
                try
                {
                    Options.SignInAsAuthenticationType = App.GetDefaultSignInAsAuthenticationType();
                }
                catch (Exception)
                {
                    Options.SignInAsAuthenticationType = "";
                }
            }

            // Switch composite options

            if (Options.EnableWebApiMode)
            {
                Options.EnableBearerTokenAuth = true;
                Options.ForceBearerTokenAuth  = true;
            }

            // Validate other options

            if (Options.ForceBearerTokenAuth && !Options.EnableBearerTokenAuth)
            {
                Options.EnableBearerTokenAuth = true;
            }

            Options.KeycloakUrl  = NormalizeUrl(Options.KeycloakUrl);
            Options.CallbackPath = NormalizeUrlPath(Options.CallbackPath);

            // Final parameter validation
            KeycloakIdentity.ValidateParameters(Options);
        }
        private void ValidateOptions()
        {
            var logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            // Check to ensure authentication type isn't already used
            var authType = Options.AuthenticationType;

            if (!Global.KeycloakOptionStore.TryAdd(authType, Options))
            {
                logger.Error($"KeycloakAuthenticationOptions: Authentication type '{authType}' already used; required unique");
                throw new Exception(
                          $"KeycloakAuthenticationOptions: Authentication type '{authType}' already used; required unique");
            }

            // Verify required options
            if (Options.KeycloakUrl == null)
            {
                ThrowOptionNotFound(nameof(Options.KeycloakUrl));
            }
            if (Options.Realm == null)
            {
                ThrowOptionNotFound(nameof(Options.Realm));
            }

            // Load web root path from config
            if (string.IsNullOrWhiteSpace(Options.VirtualDirectory))
            {
                Options.VirtualDirectory = "/";
            }
            Options.VirtualDirectory = NormalizeUrl(Options.VirtualDirectory);
            if (!Uri.IsWellFormedUriString(Options.VirtualDirectory, UriKind.Relative))
            {
                ThrowInvalidOption(nameof(Options.VirtualDirectory));
            }

            // Set default options
            if (string.IsNullOrWhiteSpace(Options.ResponseType))
            {
                Options.ResponseType = "code";
            }
            if (string.IsNullOrWhiteSpace(Options.Scope))
            {
                Options.Scope = "openid";
            }
            if (string.IsNullOrWhiteSpace(Options.CallbackPath))
            {
                Options.CallbackPath =
                    $"{Options.VirtualDirectory}/owin/security/keycloak/{Uri.EscapeDataString(Options.AuthenticationType)}/callback";
            }
            if (string.IsNullOrWhiteSpace(Options.PostLogoutRedirectUrl))
            {
                Options.PostLogoutRedirectUrl = Options.VirtualDirectory;
            }

            if (Options.SignInAsAuthenticationType == null)
            {
                try
                {
                    Options.SignInAsAuthenticationType = App.GetDefaultSignInAsAuthenticationType();
                }
                catch (Exception)
                {
                    Options.SignInAsAuthenticationType = "";
                }
            }

            // Switch composite options

            if (Options.EnableWebApiMode)
            {
                Options.EnableBearerTokenAuth = true;
                Options.ForceBearerTokenAuth  = true;
            }

            // Validate other options

            if (Options.ForceBearerTokenAuth && !Options.EnableBearerTokenAuth)
            {
                Options.EnableBearerTokenAuth = true;
            }

            Options.KeycloakUrl  = NormalizeUrl(Options.KeycloakUrl);
            Options.CallbackPath = NormalizeUrlPath(Options.CallbackPath);

            //for more than 2 minutes set default value
            if (TimeSpan.Compare(Options.RefreshBeforeTokenExpiration.Duration(), TimeSpan.FromSeconds(120).Duration()) > 0)
            {
                Options.RefreshBeforeTokenExpiration = TimeSpan.FromSeconds(30);
            }

            // Final parameter validation
            KeycloakIdentity.ValidateParameters(Options);
        }