diff --git a/core/lib/Drupal/Core/Authentication/AuthenticationManager.php b/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
index 67c9d0c..c7676a5 100644
--- a/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
+++ b/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
@@ -235,7 +235,7 @@ protected function defaultFilter(Request $request, $provider_id) {
    * @return \Drupal\Core\Authentication\AuthenticationProviderInterface[]
    *   An array of authentication provider objects.
    */
-  protected function getSortedProviders() {
+  public function getSortedProviders() {
     if (!isset($this->sortedProviders)) {
       // Sort the builders according to priority.
       krsort($this->providerOrders);
diff --git a/core/modules/rest/src/Plugin/views/display/RestExport.php b/core/modules/rest/src/Plugin/views/display/RestExport.php
index 2efdbc7..30d8358 100644
--- a/core/modules/rest/src/Plugin/views/display/RestExport.php
+++ b/core/modules/rest/src/Plugin/views/display/RestExport.php
@@ -18,6 +18,7 @@
 use Drupal\views\Plugin\views\display\PathPluginBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Routing\RouteCollection;
+use Drupal\Core\Authentication\AuthenticationManager;
 
 /**
  * The plugin that handles Data response callbacks for REST resources.
@@ -96,9 +97,11 @@ class RestExport extends PathPluginBase {
    *   The state key value store.
    * @param \Drupal\Core\Render\RendererInterface $renderer
    *   The renderer.
+   * @param \Drupal\Core\Authentication\AuthenticationManager $authentication_manager
+   *   The authentication manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state, RendererInterface $renderer) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider, $state);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state, RendererInterface $renderer, AuthenticationManager $authentication_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider, $state, $authentication_manager);
 
     $this->renderer = $renderer;
   }
@@ -113,7 +116,9 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_definition,
       $container->get('router.route_provider'),
       $container->get('state'),
-      $container->get('renderer')
+      $container->get('renderer'),
+      $container->get('authentication')
+
     );
   }
 
@@ -244,6 +249,7 @@ public function optionsSummary(&$categories, &$options) {
 
     $options['path']['category'] = 'path';
     $options['path']['title'] = $this->t('Path');
+    $options['auth']['category'] = 'path';
 
     // Remove css/exposed form settings, as they are not used for the data
     // display.
diff --git a/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
index 415b704..7389f8d 100644
--- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
@@ -23,6 +23,7 @@
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
+use Drupal\Core\Authentication\AuthenticationManager;
 
 /**
  * The base display plugin for path/callbacks. This is used for pages and feeds.
@@ -60,12 +61,15 @@
    *   The route provider.
    * @param \Drupal\Core\State\StateInterface $state
    *   The state key value store.
+   * @param \Drupal\Core\Authentication\AuthenticationManager $authentication_manager
+   *   The authentication manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state, AuthenticationManager $authentication_manager = NULL) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->routeProvider = $route_provider;
     $this->state = $state;
+    $this->authenticationManager = $authentication_manager;
   }
 
   /**
@@ -77,7 +81,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('router.route_provider'),
-      $container->get('state')
+      $container->get('state'),
+      $container->get('authentication')
     );
   }
 
@@ -118,6 +123,7 @@ protected function defineOptions() {
     $options = parent::defineOptions();
     $options['path'] = array('default' => '');
     $options['route_name'] = array('default' => '');
+    $options['auth']['default'] = array();
 
     return $options;
   }
@@ -219,6 +225,13 @@ public function collectRoutes(RouteCollection $collection) {
     if (!($route_name = $this->getOption('route_name'))) {
       $route_name = "view.$view_id.$display_id";
     }
+
+    // Add authentication to the route if it was set.
+    $auth = array_filter($this->getOption('auth'));
+    if (!empty($auth)) {
+      $route->setOption('_auth', $auth);
+    }
+
     $collection->add($route_name, $route);
     return array("$view_id.$display_id" => $route_name);
   }
@@ -378,6 +391,21 @@ public function optionsSummary(&$categories, &$options) {
       'title' => $this->t('Path'),
       'value' => views_ui_truncate($path, 24),
     );
+
+    // Authentication.
+    $auth = array_filter($this->getOption('auth'));
+    if (empty($auth)) {
+      $auth = $this->t('No authentication is set');
+    }
+    else {
+      $auth = implode(', ', $auth);
+    }
+
+    $options['auth'] = array(
+      'category' => 'page',
+      'title' => $this->t('Authentication'),
+      'value' => views_ui_truncate($auth, 24),
+    );
   }
 
   /**
@@ -401,6 +429,17 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
           '#maxlength' => 254,
         );
         break;
+      case 'auth':
+        $authentication_providers = array_keys($this->authenticationManager->getSortedProviders());
+        $form['#title'] .= $this->t('The supported authentication methods of this view');
+        $form['auth'] = array(
+          '#type' => 'checkboxes',
+          '#title' => $this->t('Autentication methods'),
+          '#description' => $this->t('These are the supported authentication providers for this view. When this view is requested, the client will be forced to authenticate with one of the selected providers. Make sure you set the appropiate requirements at the <em>Access</em> section since the Authentication System will fallback to the anonymous user if it fails to authenticate. For example: require Access: Role | Authenticated User.'),
+          '#options' => array_combine($authentication_providers, $authentication_providers),
+          '#default_value' => array_filter($this->getOption('auth')),
+        );
+        break;
     }
   }
 
@@ -430,6 +469,10 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) {
     if ($form_state->get('section') == 'path') {
       $this->setOption('path', $form_state->getValue('path'));
     }
+
+    if ($form_state->get('section') == 'auth') {
+      $this->setOption('auth', $form_state->getValue('auth'));
+    }
   }
 
   /**
