diff --git a/core/core.services.yml b/core/core.services.yml
index f00c450..3df7904 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -204,13 +204,13 @@ services:
     arguments: ['@container.namespaces']
   plugin.manager.menu.local_action:
     class: Drupal\Core\Menu\LocalActionManager
-    arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user']
+    arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@authentication']
   plugin.manager.menu.local_task:
     class: Drupal\Core\Menu\LocalTaskManager
-    arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user']
+    arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@authentication']
   plugin.manager.menu.contextual_link:
     class: Drupal\Core\Menu\ContextualLinkManager
-    arguments: ['@controller_resolver', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user']
+    arguments: ['@controller_resolver', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@authentication']
   request:
     class: Symfony\Component\HttpFoundation\Request
     synthetic: true
@@ -441,9 +441,7 @@ services:
     arguments: ['@state']
   csrf_token:
     class: Drupal\Core\Access\CsrfTokenGenerator
-    arguments: ['@private_key']
-    calls:
-      - [setCurrentUser, ['@?current_user']]
+    arguments: ['@private_key', '@authentication']
   access_manager:
     class: Drupal\Core\Access\AccessManager
     arguments: ['@router.route_provider', '@url_generator', '@paramconverter_manager']
@@ -452,9 +450,7 @@ services:
       - [setRequest, ['@?request']]
   access_subscriber:
     class: Drupal\Core\EventSubscriber\AccessSubscriber
-    arguments: ['@access_manager', '@current_user']
-    calls:
-      - [setCurrentUser, ['@?current_user']]
+    arguments: ['@access_manager', '@authentication']
     tags:
       - { name: event_subscriber }
   access_route_subscriber:
@@ -683,12 +679,6 @@ services:
     tags:
       - { name: event_subscriber }
     arguments: ['@authentication']
-  current_user:
-    class: Drupal\Core\Session\AccountInterface
-    factory_method: authenticate
-    factory_service: authentication
-    arguments: ['@request']
-    synchronized: true
   asset.css.collection_renderer:
     class: Drupal\Core\Asset\CssCollectionRenderer
     arguments: [ '@state' ]
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 0ec88d7..09cac9c 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -163,7 +163,7 @@ public static function request() {
    * @return \Drupal\Core\Session\AccountInterface
    */
   public static function currentUser() {
-    return static::$container->get('current_user');
+    return static::$container->get('authentication')->getUser();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Access/CsrfTokenGenerator.php b/core/lib/Drupal/Core/Access/CsrfTokenGenerator.php
index f2b015c..d8e7d6f 100644
--- a/core/lib/Drupal/Core/Access/CsrfTokenGenerator.php
+++ b/core/lib/Drupal/Core/Access/CsrfTokenGenerator.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Access;
 
 use Drupal\Component\Utility\Crypt;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\PrivateKey;
 use Drupal\Core\Session\AccountInterface;
 
@@ -26,30 +27,23 @@ class CsrfTokenGenerator {
   protected $privateKey;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $currentUser;
+  protected $authManager;
 
   /**
    * Constructs the token generator.
    *
    * @param \Drupal\Core\PrivateKey $private_key
    *   The private key service.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(PrivateKey $private_key) {
+  public function __construct(PrivateKey $private_key, AuthenticationManagerInterface $auth_manager) {
     $this->privateKey = $private_key;
-  }
-
-  /**
-   * Sets the current user.
-   *
-   * @param \Drupal\Core\Session\AccountInterface|null $current_user
-   *  The current user service.
-   */
-  public function setCurrentUser(AccountInterface $current_user = NULL) {
-    $this->currentUser = $current_user;
+    $this->authManager = $auth_manager;
   }
 
   /**
@@ -84,7 +78,7 @@ public function get($value = '') {
    *   is TRUE, the return value will always be TRUE for anonymous users.
    */
   public function validate($token, $value = '', $skip_anonymous = FALSE) {
-    return ($skip_anonymous && $this->currentUser->isAnonymous()) || ($token === $this->get($value));
+    return ($skip_anonymous && $this->authManager->getUser()->isAnonymous()) || ($token === $this->get($value));
   }
 
 }
diff --git a/core/lib/Drupal/Core/Authentication/AuthenticationManager.php b/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
index d3630c4..36889d9 100644
--- a/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
+++ b/core/lib/Drupal/Core/Authentication/AuthenticationManager.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Authentication;
 
+use Drupal\Core\Session\UserSession;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
@@ -54,6 +55,13 @@ class AuthenticationManager implements AuthenticationProviderInterface, Authenti
   protected $triggeredProviderId = '';
 
   /**
+   * The current user session.
+   *
+   * @var \Drupal\Core\Session\UserSession
+   */
+  protected $currentUser;
+
+  /**
    * Adds a provider to the array of registered providers.
    *
    * @param string $provider_id
@@ -83,8 +91,6 @@ public function applies(Request $request) {
    * {@inheritdoc}
    */
   public function authenticate(Request $request) {
-    global $user;
-
     $account = NULL;
 
     // Iterate the availlable providers.
@@ -112,9 +118,12 @@ public function authenticate(Request $request) {
     //  for later access.
     $request->attributes->set('_authentication_provider', $this->triggeredProviderId);
 
+    $this->currentUser = $account;
+
     // The global $user object is included for backward compatibility only and
     // should be considered deprecated.
     // @todo Remove this line once global $user is no longer used.
+    global $user;
     $user = $account;
 
     return $account;
@@ -135,6 +144,25 @@ public function defaultProviderId() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function getUser() {
+    if (empty($this->currentUser)) {
+      $this->currentUser = drupal_anonymous_user();
+    }
+
+    return $this->currentUser;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUser(UserSession $user) {
+    $this->currentUser = $user;
+  }
+
+
+  /**
    * Returns the sorted array of authentication providers.
    *
    * @return array
diff --git a/core/lib/Drupal/Core/Authentication/AuthenticationManagerInterface.php b/core/lib/Drupal/Core/Authentication/AuthenticationManagerInterface.php
index b547edd..c45b7d4 100644
--- a/core/lib/Drupal/Core/Authentication/AuthenticationManagerInterface.php
+++ b/core/lib/Drupal/Core/Authentication/AuthenticationManagerInterface.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\Core\Authentication;
 
+use Drupal\Core\Session\UserSession;
+
 /**
  * Defines an interface for authentication managers.
  */
@@ -19,4 +21,21 @@
    *   The service id of the default authentication provider.
    */
   public function defaultProviderId();
+
+  /**
+   * Gets a user.
+   *
+   * @return \Drupal\Core\Session\UserSession
+   *   The current user session.
+   */
+  public function getUser();
+
+  /**
+   * Sets a user.
+   *
+   * @param \Drupal\Core\Session\UserSession $user
+   *   The user session to set.
+   */
+  public function setUser(UserSession $user);
+
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
index 0c31999..b412d1a 100644
--- a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\EventSubscriber;
 
 use Drupal\Core\Access\AccessManager;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpKernel\KernelEvents;
@@ -22,11 +23,11 @@
 class AccessSubscriber implements EventSubscriberInterface {
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $currentUser;
+  protected $authManager;
 
   /**
    * The access manager.
@@ -41,12 +42,12 @@ class AccessSubscriber implements EventSubscriberInterface {
    * @param \Drupal\Core\Access\AccessManager $access_manager
    *   The access check manager that will be responsible for applying
    *   AccessCheckers against routes.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(AccessManager $access_manager, AccountInterface $current_user) {
+  public function __construct(AccessManager $access_manager, AuthenticationManagerInterface $auth_manager) {
     $this->accessManager = $access_manager;
-    $this->currentUser = $current_user;
+    $this->authManager = $auth_manager;
   }
 
   /**
@@ -74,7 +75,7 @@ public function onKernelRequestAccessCheck(GetResponseEvent $event) {
     // Wrap this in a try/catch to ensure the '_controller_request' attribute
     // can always be removed.
     try {
-      $access = $this->accessManager->check($request->attributes->get(RouteObjectInterface::ROUTE_OBJECT), $request, $this->currentUser);
+      $access = $this->accessManager->check($request->attributes->get(RouteObjectInterface::ROUTE_OBJECT), $request, $this->authManager->getUser());
     }
     catch (\Exception $e) {
       $request->attributes->remove('_controller_request');
@@ -89,16 +90,6 @@ public function onKernelRequestAccessCheck(GetResponseEvent $event) {
   }
 
   /**
-   * Sets the current user.
-   *
-   * @param \Drupal\Core\Session\AccountInterface|null $current_user
-   *  The current user service.
-   */
-  public function setCurrentUser(AccountInterface $current_user = NULL) {
-    $this->currentUser = $current_user;
-  }
-
-  /**
    * Registers the methods in this class that should be listeners.
    *
    * @return array
diff --git a/core/lib/Drupal/Core/Menu/ContextualLinkManager.php b/core/lib/Drupal/Core/Menu/ContextualLinkManager.php
index 5141f5c..387c61b 100644
--- a/core/lib/Drupal/Core/Menu/ContextualLinkManager.php
+++ b/core/lib/Drupal/Core/Menu/ContextualLinkManager.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Core\Access\AccessManager;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Controller\ControllerResolverInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -17,7 +18,6 @@
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator;
 use Drupal\Core\Plugin\Discovery\YamlDiscovery;
 use Drupal\Core\Plugin\Factory\ContainerFactory;
-use Drupal\Core\Session\AccountInterface;
 
 /**
  * Defines a contextual link plugin manager to deal with contextual links.
@@ -63,11 +63,11 @@ class ContextualLinkManager extends DefaultPluginManager implements ContextualLi
   protected $accessManager;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $account;
+  protected $authManager;
 
   /**
    * A static cache of all the contextual link plugins by group name.
@@ -89,17 +89,17 @@ class ContextualLinkManager extends DefaultPluginManager implements ContextualLi
    *   The language manager.
    * @param \Drupal\Core\Access\AccessManager $access_manager
    *   The access manager.
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The current user.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(ControllerResolverInterface $controller_resolver, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager, AccountInterface $account) {
+  public function __construct(ControllerResolverInterface $controller_resolver, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager, AuthenticationManagerInterface $auth_manager) {
     $this->discovery = new YamlDiscovery('contextual_links', $module_handler->getModuleDirectories());
     $this->discovery = new ContainerDerivativeDiscoveryDecorator($this->discovery);
     $this->factory = new ContainerFactory($this);
 
     $this->controllerResolver = $controller_resolver;
     $this->accessManager = $access_manager;
-    $this->account = $account;
+    $this->authManager = $auth_manager;
     $this->alterInfo($module_handler, 'contextual_links_plugins');
     $this->setCacheBackend($cache_backend, $language_manager, 'contextual_links_plugins');
   }
@@ -155,7 +155,7 @@ public function getContextualLinksArrayByGroup($group_name, array $route_paramet
       $route_name = $plugin->getRouteName();
 
       // Check access.
-      if (!$this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->account)) {
+      if (!$this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->authManager->getUser())) {
         continue;
       }
 
diff --git a/core/lib/Drupal/Core/Menu/LocalActionManager.php b/core/lib/Drupal/Core/Menu/LocalActionManager.php
index 32ae80e..7fc7d33 100644
--- a/core/lib/Drupal/Core/Menu/LocalActionManager.php
+++ b/core/lib/Drupal/Core/Menu/LocalActionManager.php
@@ -20,7 +20,7 @@
 use Drupal\Core\Routing\RouteProviderInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
-use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 
 /**
  * Manages discovery and instantiation of menu local action plugins.
@@ -85,11 +85,11 @@ class LocalActionManager extends DefaultPluginManager {
   protected $accessManager;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $account;
+  protected $authManager;
 
 /**
    * The plugin instances.
@@ -116,8 +116,10 @@ class LocalActionManager extends DefaultPluginManager {
    *   The language manager.
    * @param \Drupal\Core\Access\AccessManager $access_manager
    *   The access manager.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(ControllerResolverInterface $controller_resolver, Request $request, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager, AccountInterface $account) {
+  public function __construct(ControllerResolverInterface $controller_resolver, Request $request, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager, AuthenticationManagerInterface $auth_manager) {
     // Skip calling the parent constructor, since that assumes annotation-based
     // discovery.
     $this->discovery = new YamlDiscovery('local_actions', $module_handler->getModuleDirectories());
@@ -125,7 +127,7 @@ public function __construct(ControllerResolverInterface $controller_resolver, Re
     $this->factory = new ContainerFactory($this);
     $this->routeProvider = $route_provider;
     $this->accessManager = $access_manager;
-    $this->account = $account;
+    $this->authManager = $auth_manager;
     $this->controllerResolver = $controller_resolver;
     $this->request = $request;
     $this->alterInfo($module_handler, 'menu_local_actions');
@@ -190,7 +192,7 @@ public function getActionsForRoute($route_appears) {
           'route_parameters' => $route_parameters,
           'localized_options' => $plugin->getOptions($this->request),
         ),
-        '#access' => $this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->account),
+        '#access' => $this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->authManager->getUser()),
         '#weight' => $plugin->getWeight(),
       );
     }
diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
index a436d57..a4b698f 100644
--- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php
+++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Core\Access\AccessManager;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Controller\ControllerResolverInterface;
@@ -19,7 +20,6 @@
 use Drupal\Core\Plugin\Discovery\YamlDiscovery;
 use Drupal\Core\Plugin\Factory\ContainerFactory;
 use Drupal\Core\Routing\RouteProviderInterface;
-use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -91,11 +91,11 @@ class LocalTaskManager extends DefaultPluginManager {
   protected $accessManager;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $account;
+  protected $authManager;
 
   /**
    * Constructs a \Drupal\Core\Menu\LocalTaskManager object.
@@ -114,10 +114,10 @@ class LocalTaskManager extends DefaultPluginManager {
    *   The language manager.
    * @param \Drupal\Core\Access\AccessManager $access_manager
    *   The access manager.
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The current user.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(ControllerResolverInterface $controller_resolver, Request $request, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache, LanguageManager $language_manager, AccessManager $access_manager, AccountInterface $account) {
+  public function __construct(ControllerResolverInterface $controller_resolver, Request $request, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache, LanguageManager $language_manager, AccessManager $access_manager, AuthenticationManagerInterface $auth_manager) {
     $this->discovery = new YamlDiscovery('local_tasks', $module_handler->getModuleDirectories());
     $this->discovery = new ContainerDerivativeDiscoveryDecorator($this->discovery);
     $this->factory = new ContainerFactory($this);
@@ -125,7 +125,7 @@ public function __construct(ControllerResolverInterface $controller_resolver, Re
     $this->request = $request;
     $this->routeProvider = $route_provider;
     $this->accessManager = $access_manager;
-    $this->account = $account;
+    $this->authManager = $auth_manager;
     $this->alterInfo($module_handler, 'local_tasks');
     $this->setCacheBackend($cache, $language_manager, 'local_task_plugins', array('local_task' => TRUE));
   }
@@ -286,7 +286,7 @@ public function getTasksBuild($current_route_name) {
         $route_parameters = $child->getRouteParameters($this->request);
 
         // Find out whether the user has access to the task.
-        $access = $this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->account);
+        $access = $this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->authManager->getUser());
         if ($access) {
           $active = $this->isRouteActive($current_route_name, $route_name, $route_parameters);
 
diff --git a/core/modules/comment/comment.services.yml b/core/modules/comment/comment.services.yml
index bcfb009..809344f 100644
--- a/core/modules/comment/comment.services.yml
+++ b/core/modules/comment/comment.services.yml
@@ -7,7 +7,7 @@ services:
 
   comment.manager:
     class: Drupal\comment\CommentManager
-    arguments: ['@field.info', '@entity.manager', '@current_user', '@config.factory', '@string_translation', '@url_generator']
+    arguments: ['@field.info', '@entity.manager', '@authentication', '@config.factory', '@string_translation', '@url_generator']
 
   comment.route_enhancer:
       class: Drupal\comment\Routing\CommentBundleEnhancer
diff --git a/core/modules/comment/lib/Drupal/comment/CommentManager.php b/core/modules/comment/lib/Drupal/comment/CommentManager.php
index e1075b3..c36b5d5 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentManager.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentManager.php
@@ -8,6 +8,7 @@
 namespace Drupal\comment;
 
 use Drupal\Component\Utility\String;
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
@@ -36,11 +37,11 @@ class CommentManager implements CommentManagerInterface {
   protected $entityManager;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface $current_user
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $currentUser;
+  protected $authManager;
 
   /**
    * Whether the DRUPAL_AUTHENTICATED_RID can post comments.
@@ -77,8 +78,8 @@ class CommentManager implements CommentManagerInterface {
    *   The field info service.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    * @param \Drupal\Core\Config\ConfigFactory $config_factory
    *   The config factory.
    * @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
@@ -86,10 +87,10 @@ class CommentManager implements CommentManagerInterface {
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
    */
-  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager, AccountInterface $current_user, ConfigFactory $config_factory, TranslationInterface $translation_manager, UrlGeneratorInterface $url_generator) {
+  public function __construct(FieldInfo $field_info, EntityManagerInterface $entity_manager, AuthenticationManagerInterface $auth_manager, ConfigFactory $config_factory, TranslationInterface $translation_manager, UrlGeneratorInterface $url_generator) {
     $this->fieldInfo = $field_info;
     $this->entityManager = $entity_manager;
-    $this->currentUser = $current_user;
+    $this->authManager = $auth_manager;
     $this->userConfig = $config_factory->get('user.settings');
     $this->translationManager = $translation_manager;
     $this->urlGenerator = $url_generator;
@@ -256,7 +257,7 @@ public function getFieldUIPageTitle($commented_entity_type, $field_name) {
    * {@inheritdoc}
    */
   public function forbiddenMessage(EntityInterface $entity, $field_name) {
-    if ($this->currentUser->isAnonymous()) {
+    if ($this->authManager->getUser()->isAnonymous()) {
       if (!isset($this->authenticatedCanPostComments)) {
         // We only output a link if we are certain that users will get the
         // permission to post comments by logging in.
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php b/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php
index c3acc23..faaee7f 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\node\Plugin\Search;
 
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Config\Config;
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Database\Query\SelectExtender;
@@ -68,11 +69,11 @@ class NodeSearch extends ConfigurableSearchPluginBase implements AccessibleInter
   protected $state;
 
   /**
-   * The Drupal account to use for checking for access to advanced search.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $account;
+  protected $authManager;
 
   /**
    * An array of additional rankings from hook_ranking().
@@ -114,7 +115,7 @@ static public function create(ContainerInterface $container, array $configuratio
       $container->get('module_handler'),
       $container->get('config.factory')->get('search.settings'),
       $container->get('state'),
-      $container->get('current_user')
+      $container->get('authentication')
     );
   }
 
@@ -137,16 +138,16 @@ static public function create(ContainerInterface $container, array $configuratio
    *   A config object for 'search.settings'.
    * @param \Drupal\Core\KeyValueStore\StateInterface $state
    *   The Drupal state object used to set 'node.cron_last'.
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The $account object to use for checking for access to advanced search.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    */
-  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AuthenticationManagerInterface $auth_manager) {
     $this->database = $database;
     $this->entityManager = $entity_manager;
     $this->moduleHandler = $module_handler;
     $this->searchSettings = $search_settings;
     $this->state = $state;
-    $this->account = $account;
+    $this->authManager = $auth_manager;
     parent::__construct($configuration, $plugin_id, $plugin_definition);
   }
 
@@ -371,13 +372,14 @@ public function indexStatus() {
    * {@inheritdoc}
    */
   public function searchFormAlter(array &$form, array &$form_state) {
+    $account = $this->authManager->getUser();
     // Add keyword boxes.
     $form['advanced'] = array(
       '#type' => 'details',
       '#title' => t('Advanced search'),
       '#collapsed' => TRUE,
       '#attributes' => array('class' => array('search-advanced')),
-      '#access' => $this->account && $this->account->hasPermission('use advanced search'),
+      '#access' => $account && $account->hasPermission('use advanced search'),
     );
     $form['advanced']['keywords-fieldset'] = array(
       '#type' => 'fieldset',
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Search/UserSearch.php b/core/modules/user/lib/Drupal/user/Plugin/Search/UserSearch.php
index 518d9c0..3311050 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Search/UserSearch.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Search/UserSearch.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\user\Plugin\Search;
 
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -47,11 +48,11 @@ class UserSearch extends SearchPluginBase implements AccessibleInterface {
   protected $moduleHandler;
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $currentUser;
+  protected $authManager;
 
   /**
    * {@inheritdoc}
@@ -61,7 +62,7 @@ static public function create(ContainerInterface $container, array $configuratio
       $container->get('database'),
       $container->get('entity.manager'),
       $container->get('module_handler'),
-      $container->get('current_user'),
+      $container->get('authentication'),
       $configuration,
       $plugin_id,
       $plugin_definition
@@ -77,8 +78,8 @@ static public function create(ContainerInterface $container, array $configuratio
    *   The entity manager.
    * @param ModuleHandlerInterface $module_handler
    *   The module handler.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The current user.
+   * @param \Drupal\Core\Authentication\AuthenticationManagerInterface $auth_manager
+   *   The authentication manager.
    * @param array $configuration
    *   A configuration array containing information about the plugin instance.
    * @param string $plugin_id
@@ -86,11 +87,11 @@ static public function create(ContainerInterface $container, array $configuratio
    * @param array $plugin_definition
    *   The plugin implementation definition.
    */
-  public function __construct(Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AccountInterface $current_user, array $configuration, $plugin_id, array $plugin_definition) {
+  public function __construct(Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, AuthenticationManagerInterface $auth_manager, array $configuration, $plugin_id, array $plugin_definition) {
     $this->database = $database;
     $this->entityManager = $entity_manager;
     $this->moduleHandler = $module_handler;
-    $this->currentUser = $current_user;
+    $this->authManager = $auth_manager;
     parent::__construct($configuration, $plugin_id, $plugin_definition);
   }
 
@@ -106,6 +107,8 @@ public function access($operation = 'view', AccountInterface $account = NULL) {
    */
   public function execute() {
     $results = array();
+    $current_user = $this->authManager->getUser();
+
     if (!$this->isSearchExecutable()) {
       return $results;
     }
@@ -116,7 +119,7 @@ public function execute() {
       ->select('users')
       ->extend('Drupal\Core\Database\Query\PagerSelectExtender');
     $query->fields('users', array('uid'));
-    if ($this->currentUser->hasPermission('administer users')) {
+    if ($current_user->hasPermission('administer users')) {
       // Administrators can also search in the otherwise private email field, and
       // they don't need to be restricted to only active users.
       $query->fields('users', array('mail'));
@@ -142,7 +145,7 @@ public function execute() {
         'title' => $account->getUsername(),
         'link' => url('user/' . $account->id(), array('absolute' => TRUE)),
       );
-      if ($this->currentUser->hasPermission('administer users')) {
+      if ($current_user->hasPermission('administer users')) {
         $result['title'] .= ' (' . $account->getEmail() . ')';
       }
       $results[] = $result;
diff --git a/core/modules/user/lib/Drupal/user/Theme/AdminNegotiator.php b/core/modules/user/lib/Drupal/user/Theme/AdminNegotiator.php
index faaeb40..bb25d12 100644
--- a/core/modules/user/lib/Drupal/user/Theme/AdminNegotiator.php
+++ b/core/modules/user/lib/Drupal/user/Theme/AdminNegotiator.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\user\Theme;
 
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -19,11 +20,11 @@
 class AdminNegotiator implements ThemeNegotiatorInterface {
 
   /**
-   * The current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $user;
+  protected $authManager;
 
   /**
    * The config factory.
@@ -49,8 +50,8 @@ class AdminNegotiator implements ThemeNegotiatorInterface {
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
    */
-  public function __construct(AccountInterface $user, ConfigFactory $config_factory, EntityManagerInterface $entity_manager) {
-    $this->user = $user;
+  public function __construct(AuthenticationManagerInterface $auth_manager, ConfigFactory $config_factory, EntityManagerInterface $entity_manager) {
+    $this->authManager = $auth_manager;
     $this->configFactory = $config_factory;
     $this->entityManager = $entity_manager;
   }
@@ -60,7 +61,7 @@ public function __construct(AccountInterface $user, ConfigFactory $config_factor
    */
   public function applies(Request $request) {
     $path = $request->attributes->get('_system_path');
-    return ($this->entityManager->hasController('user_role', 'storage') && $this->user->hasPermission('view the administration theme') && path_is_admin($path));
+    return ($this->entityManager->hasController('user_role', 'storage') && $this->authManager->getUser()->hasPermission('view the administration theme') && path_is_admin($path));
   }
 
   /**
diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml
index 23d8706..23cf0cd 100644
--- a/core/modules/user/user.services.yml
+++ b/core/modules/user/user.services.yml
@@ -27,7 +27,7 @@ services:
       - { name: event_subscriber }
   theme.negotiator.admin_theme:
     class: Drupal\user\Theme\AdminNegotiator
-    arguments: ['@current_user', '@config.factory', '@entity.manager']
+    arguments: ['@authentication', '@config.factory', '@entity.manager']
     tags:
       - { name: theme_negotiator, priority: -40 }
   user.permissions_hash:
diff --git a/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php b/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php
index c6f9828..5a6a6de 100644
--- a/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php
+++ b/core/modules/views/lib/Drupal/views/ViewExecutableFactory.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\views;
 
+use Drupal\Core\Authentication\AuthenticationManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\views\ViewStorageInterface;
 
@@ -16,11 +17,11 @@
 class ViewExecutableFactory {
 
   /**
-   * Stores the current user.
+   * The authentication manager.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Drupal\Core\Authentication\AuthenticationManagerInterface
    */
-  protected $user;
+  protected $authManager;
 
   /**
    * Constructs a new ViewExecutableFactory
@@ -28,8 +29,8 @@ class ViewExecutableFactory {
    * @param \Drupal\Core\Session\AccountInterface $user
    *   The current user.
    */
-  public function __construct(AccountInterface $user) {
-    $this->user = $user;
+  public function __construct(AuthenticationManagerInterface $auth_manager) {
+    $this->authManager = $auth_manager;
   }
 
   /**
@@ -42,7 +43,7 @@ public function __construct(AccountInterface $user) {
    *   A ViewExecutable instance.
    */
   public function get(ViewStorageInterface $view) {
-    return new ViewExecutable($view, $this->user);
+    return new ViewExecutable($view, $this->authManager->getUser());
   }
 
 }
diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml
index 30aa96a..6605790 100644
--- a/core/modules/views/views.services.yml
+++ b/core/modules/views/views.services.yml
@@ -64,7 +64,7 @@ services:
     arguments: ['@views.views_data']
   views.executable:
     class: Drupal\views\ViewExecutableFactory
-    arguments: ['@current_user']
+    arguments: ['@authentication']
   views.analyzer:
     class: Drupal\views\Analyzer
     arguments: ['@module_handler']
