diff --git a/src/Plugin/openapi/OpenApiGenerator/JsonApiGenerator.php b/src/Plugin/openapi/OpenApiGenerator/JsonApiGenerator.php
index b5cc268..2b40707 100644
--- a/src/Plugin/openapi/OpenApiGenerator/JsonApiGenerator.php
+++ b/src/Plugin/openapi/OpenApiGenerator/JsonApiGenerator.php
@@ -3,12 +3,12 @@
 namespace Drupal\openapi\Plugin\openapi\OpenApiGenerator;
 
 use Drupal\openapi\Plugin\openapi\OpenApiGeneratorBase;
+use Drupal\Core\Authentication\AuthenticationCollectorInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Entity\ContentEntityTypeInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\schemata\SchemaFactory;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -38,56 +38,6 @@ class JsonApiGenerator extends OpenApiGeneratorBase {
   static $DEFINITION_SEPARATOR = '--';
 
   /**
-   * JsonApiGenerator constructor.
-   *
-   * @param array $configuration
-   *   Plugin configuration.
-   * @param string $plugin_id
-   *   Unique plugin id.
-   * @param array|mixed $plugin_definition
-   *   Plugin instance definition.
-   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
-   *   The entity type manager.
-   * @param \Drupal\Core\Routing\RouteProviderInterface $routing_provider
-   *   The routing provider.
-   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager
-   *   The field manager.
-   * @param \Drupal\schemata\SchemaFactory $schema_factory
-   *   The schema factory.
-   * @param \Symfony\Component\Serializer\SerializerInterface $serializer
-   *   The serializer.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
-   *   The current request stack.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The configuration object factory.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler service.
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, RouteProviderInterface $routing_provider, EntityFieldManagerInterface $field_manager, SchemaFactory $schema_factory, SerializerInterface $serializer, RequestStack $request_stack, ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $routing_provider, $field_manager, $schema_factory, $serializer, $request_stack, $config_factory);
-    $this->moduleHandler = $module_handler;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->get('entity_type.manager'),
-      $container->get('router.route_provider'),
-      $container->get('entity_field.manager'),
-      $container->get('schemata.schema_factory'),
-      $container->get('serializer'),
-      $container->get('request_stack'),
-      $container->get('config.factory'),
-      $container->get('module_handler')
-    );
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function getBasePath() {
diff --git a/src/Plugin/openapi/OpenApiGenerator/RestGenerator.php b/src/Plugin/openapi/OpenApiGenerator/RestGenerator.php
index 8e584b4..79570cd 100644
--- a/src/Plugin/openapi/OpenApiGenerator/RestGenerator.php
+++ b/src/Plugin/openapi/OpenApiGenerator/RestGenerator.php
@@ -3,11 +3,13 @@
 namespace Drupal\openapi\Plugin\openapi\OpenApiGenerator;
 
 use Drupal\openapi\Plugin\openapi\OpenApiGeneratorBase;
+use Drupal\Core\Authentication\AuthenticationCollectorInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\openapi\RestInspectionTrait;
@@ -56,11 +58,15 @@ class RestGenerator extends OpenApiGeneratorBase {
    *   The current request stack.
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The configuration object factory.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
+   * @param \Drupal\Core\Authentication\AuthenticationCollectorInterface $authentication_collector
+   *   The authentication collector.
    * @param \Drupal\rest\Plugin\Type\ResourcePluginManager $rest_manager
    *   The resource plugin manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, RouteProviderInterface $routing_provider, EntityFieldManagerInterface $field_manager, SchemaFactory $schema_factory, SerializerInterface $serializer, RequestStack $request_stack, ConfigFactoryInterface $config_factory, ResourcePluginManager $rest_manager) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $routing_provider, $field_manager, $schema_factory, $serializer, $request_stack, $config_factory);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, RouteProviderInterface $routing_provider, EntityFieldManagerInterface $field_manager, SchemaFactory $schema_factory, SerializerInterface $serializer, RequestStack $request_stack, ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, AuthenticationCollectorInterface $authentication_collector, ResourcePluginManager $rest_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $routing_provider, $field_manager, $schema_factory, $serializer, $request_stack, $config_factory, $module_handler, $authentication_collector);
     $this->manager = $rest_manager;
   }
 
@@ -79,6 +85,8 @@ class RestGenerator extends OpenApiGeneratorBase {
       $container->get('serializer'),
       $container->get('request_stack'),
       $container->get('config.factory'),
+      $container->get('module_handler'),
+      $container->get('authentication_collector'),
       $container->get('plugin.manager.rest')
     );
   }
diff --git a/src/Plugin/openapi/OpenApiGeneratorBase.php b/src/Plugin/openapi/OpenApiGeneratorBase.php
index 5efba57..10a8f47 100644
--- a/src/Plugin/openapi/OpenApiGeneratorBase.php
+++ b/src/Plugin/openapi/OpenApiGeneratorBase.php
@@ -3,11 +3,13 @@
 namespace Drupal\openapi\Plugin\openapi;
 
 use Drupal\Component\Plugin\PluginBase;
+use Drupal\Core\Authentication\AuthenticationCollectorInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Entity\ContentEntityTypeInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
@@ -87,6 +89,20 @@ abstract class OpenApiGeneratorBase extends PluginBase implements OpenApiGenerat
   protected $configFactory;
 
   /**
+   * The configuration object factory.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The configuration object factory.
+   *
+   * @var \Drupal\Core\Authentication\AuthenticationCollectorInterface
+   */
+  protected $authenticationCollector;
+
+  /**
    * The request options parameter.
    *
    * @var mixed|array
@@ -116,8 +132,12 @@ abstract class OpenApiGeneratorBase extends PluginBase implements OpenApiGenerat
    *   The current request stack.
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The configuration object factory.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
+   * @param \Drupal\Core\Authentication\AuthenticationCollectorInterface $authentication_collector
+   *   The authentication collector.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, RouteProviderInterface $routing_provider, EntityFieldManagerInterface $field_manager, SchemaFactory $schema_factory, SerializerInterface $serializer, RequestStack $request_stack, ConfigFactoryInterface $config_factory) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, RouteProviderInterface $routing_provider, EntityFieldManagerInterface $field_manager, SchemaFactory $schema_factory, SerializerInterface $serializer, RequestStack $request_stack, ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, AuthenticationCollectorInterface $authentication_collector) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->label = $this->getPluginDefinition()["label"];
@@ -128,6 +148,8 @@ abstract class OpenApiGeneratorBase extends PluginBase implements OpenApiGenerat
     $this->serializer = $serializer;
     $this->request = $request_stack->getCurrentRequest();
     $this->configFactory = $config_factory;
+    $this->moduleHandler = $module_handler;
+    $this->authenticationCollector = $authentication_collector;
     $this->options = [];
   }
 
@@ -145,7 +167,9 @@ abstract class OpenApiGeneratorBase extends PluginBase implements OpenApiGenerat
       $container->get('schemata.schema_factory'),
       $container->get('serializer'),
       $container->get('request_stack'),
-      $container->get('config.factory')
+      $container->get('config.factory'),
+      $container->get('module_handler'),
+      $container->get('authentication_collector')
     );
   }
 
@@ -234,7 +258,49 @@ abstract class OpenApiGeneratorBase extends PluginBase implements OpenApiGenerat
    * {@inheritdoc}
    */
   public function getSecurityDefinitions() {
-    return [];
+    $auth_providers = $this->authenticationCollector->getSortedProviders();
+    $security_definitions = [];
+
+    foreach ($auth_providers as $provider => $info) {
+      $def = [
+        'type' => 'unknown',
+        'description' => 'Unknown Authentication Provider',
+      ];
+      $base_url = $this->request->getSchemeAndHttpHost() . '/' . $this->request->getBasePath();
+      switch($provider) {
+        case 'basic_auth':
+          $def = [
+            'type' => 'basic'
+          ];
+          break;
+        case 'cookie':
+          $def = [
+            'type' => 'cookie',
+            'in' => 'cookie',
+            'name' => 'JSESSIONID',
+          ];
+          break;
+        case 'oauth':
+          $def = [
+            'type' => 'oauth1',
+            'flow' => 'implicit',
+            'authorizationUrl' => $base_url . 'authenticate',
+            'tokenUrl' => $base_url . 'oauth/access_token',
+            'x-requestUrl' => $base_url . 'request_token',
+          ];
+          break;
+        case 'oauth2':
+          $def = [
+            'type' => 'oauth2',
+            'flow' => 'password',
+            'tokenUrl' => $base_url . 'oauth/token',
+          ];
+          break;
+      }
+      $security_definitions[$provider] = $def;
+    }
+
+    return $security_definitions;
   }
 
   /**
diff --git a/tests/src/Functional/RequestTest.php b/tests/src/Functional/RequestTest.php
index 4ad199b..5d8adda 100644
--- a/tests/src/Functional/RequestTest.php
+++ b/tests/src/Functional/RequestTest.php
@@ -269,6 +269,15 @@ class RequestTest extends BrowserTestBase {
       }
     }
 
+    // Validate that all security definitions are valid, and have a provider.
+    $security_definitions = $decoded_response['securityDefinitions'];
+    $auth_providers = $this->container->get('authentication_collector')->getSortedProviders();
+    $supported_security_types = ['basic', 'cookie', 'oauth1', 'oauth2'];
+    foreach ($security_definitions as $definition_id => $definition) {
+      $this->assertTrue(array_key_exists($definition_id, $auth_providers), 'Security definition ' . $definition_id . ' not an auth provider.');
+      $this->assertTrue(in_array($definition['type'], $supported_security_types), 'Security schema ' . $definition_id . ' not an availabe definition.');
+    }
+
     // Test paths for valid tags, schema, security, and definitions.
     $paths = &$decoded_response['paths'];
     $tag_names = array_column($tags, 'name');
@@ -295,7 +304,6 @@ class RequestTest extends BrowserTestBase {
           };
         }
 
-
         // Remove all tested properties from method schema.
         unset($method_schema['tags']);
         unset($method_schema['schemes']);
