diff --git a/core/lib/Drupal/Core/File/File.php b/core/lib/Drupal/Core/File/File.php
index b35f5ee..2e5e67d 100644
--- a/core/lib/Drupal/Core/File/File.php
+++ b/core/lib/Drupal/Core/File/File.php
@@ -22,6 +22,13 @@ class File extends Entity {
   public $fid;
 
   /**
+   * The file UUID.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
    * The file language code.
    *
    * @var string
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index 4b3c9fc..618a091 100644
--- a/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -91,6 +91,13 @@ function comment_schema() {
         'not null' => TRUE,
         'description' => 'Primary Key: Unique comment ID.',
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the comment.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'pid' => array(
         'type' => 'int',
         'not null' => TRUE,
@@ -181,6 +188,7 @@ function comment_schema() {
       'comment_uid' => array('uid'),
       'comment_nid_langcode' => array('nid', 'langcode'),
       'comment_created' => array('created'),
+      'uuid' => array('uuid'),
     ),
     'primary key' => array('cid'),
     'foreign keys' => array(
@@ -282,6 +290,33 @@ function comment_update_8000() {
 }
 
 /**
+ * Create a UUID column for comments.
+ *
+ * @todo UUID upgrade path: http://drupal.org/node/1642526
+ */
+function comment_update_8001() {
+  $spec = array(
+    'description' => 'The universally unique identifier for the comment.',
+    'type' => 'varchar',
+    'length' => 128,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys = array(
+    'indexes' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  // Account for sites having the contributed UUID module installed.
+  if (db_field_exists('comment', 'uuid')) {
+    db_change_field('comment', 'uuid', 'uuid', $spec, $keys);
+  }
+  else {
+    db_add_field('comment', 'uuid', $spec, $keys);
+  }
+}
+
+/**
  * @} End of "addtogroup updates-7.x-to-8.x".
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index a6230f2..815fce3 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -109,6 +109,7 @@ function comment_entity_info() {
         'id' => 'cid',
         'bundle' => 'node_type',
         'label' => 'subject',
+        'uuid' => 'uuid',
       ),
       'bundles' => array(),
       'view modes' => array(
diff --git a/core/modules/comment/lib/Drupal/comment/Comment.php b/core/modules/comment/lib/Drupal/comment/Comment.php
index 101a679..a7bacd4 100644
--- a/core/modules/comment/lib/Drupal/comment/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Comment.php
@@ -22,6 +22,13 @@ class Comment extends Entity {
   public $cid;
 
   /**
+   * The comment UUID.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
    * The parent comment ID if this is a reply to a comment.
    *
    * @var integer
diff --git a/core/modules/entity/entity.api.php b/core/modules/entity/entity.api.php
index 02d8754..5359376 100644
--- a/core/modules/entity/entity.api.php
+++ b/core/modules/entity/entity.api.php
@@ -76,6 +76,9 @@
  *       'subject' should be specified here. If complex logic is required to
  *       build the label, a 'label callback' should be defined instead (see
  *       the 'label callback' section above for details).
+ *     - uuid (optional): The name of the property that contains the universally
+ *       unique identifier of the entity, which is used to distinctly identify
+ *       an entity across different systems.
  *   - bundle keys: An array describing how the Field API can extract the
  *     information it needs from the bundle objects for this type (e.g
  *     $vocabulary objects for terms; not applicable for nodes). This entry can
@@ -147,6 +150,7 @@ function hook_entity_info() {
         'id' => 'nid',
         'revision' => 'vid',
         'bundle' => 'type',
+        'uuid' => 'uuid',
       ),
       'bundle keys' => array(
         'bundle' => 'type',
diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index a66b1e8..7514458 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -5,7 +5,9 @@
  * Entity API for handling entities like nodes or users.
  */
 
+use Drupal\entity\EntityFieldQuery;
 use Drupal\entity\EntityMalformedException;
+use Drupal\entity\EntityStorageException;
 use Drupal\entity\EntityInterface;
 
 /**
@@ -217,6 +219,64 @@ function entity_load($entity_type, $id, $reset = FALSE) {
 }
 
 /**
+ * Loads an entity by UUID.
+ *
+ * Note that some entity types may not support UUIDs.
+ *
+ * @see hook_entity_info()
+ *
+ * @param string $entity_type
+ *   The entity type to load; e.g., 'node' or 'user'.
+ * @param string $uuid
+ *   The UUID of the entity to load.
+ * @param bool $reset
+ *   Whether to reset the internal cache for the requested entity type.
+ *
+ * @return EntityInterface|FALSE
+ *   The entity object, or FALSE if there is no entity with the given UUID.
+ *
+ * @todo Provide an entity CRUD controller API to execute proper property-based
+ *   lookups. This uses an EntityFieldQuery, since the $conditions parameter of
+ *   EntityStorageControllerInterface::load() is deprecated, although it would
+ *   be the most simple solution for entity-level properties that are expected
+ *   to universally exist for all entity types. At the same time, the entire
+ *   logic of this function absolutely belongs into the entity storage
+ *   controller, which has all required information readily at hand. However, we
+ *   do not want to pollute EntityStorageControllerInterface with property
+ *   specific ::loadByUUID() methods; a generic ::loadByProperty() method would
+ *   be more appropriate, but potentially breaks the separation of concerns.
+ *   Overall, this is way too much code to retrieve a single entity and the API
+ *   definitely has to be cleaned up for Drupal 8.
+ */
+function entity_load_by_uuid($entity_type, $uuid, $reset = FALSE) {
+  $entity_info = entity_get_info($entity_type);
+  if (empty($entity_info['entity keys']['uuid'])) {
+    throw new EntityStorageException("Entity type $entity_type does not support UUIDs.");
+  }
+  $uuid_key = $entity_info['entity keys']['uuid'];
+
+  // Look up the entity ID for the given UUID.
+  $entity_query = new EntityFieldQuery();
+  $result = $entity_query
+    ->entityCondition('entity_type', $entity_type)
+    ->propertyCondition($uuid_key, $uuid)
+    ->range(0, 1)
+    ->execute();
+
+  if (empty($result[$entity_type])) {
+    return FALSE;
+  }
+
+  $controller = entity_get_controller($entity_type);
+  if ($reset) {
+    $controller->resetCache();
+  }
+  $id = key($result[$entity_type]);
+  $entities = $controller->load(array($id));
+  return isset($entities[$id]) ? $entities[$id] : FALSE;
+}
+
+/**
  * Loads multiple entities from the database.
  *
  * This function should be used whenever you need to load more than one entity
diff --git a/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php b/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
index 8d89341..8c4f3c8 100644
--- a/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
+++ b/core/modules/entity/lib/Drupal/entity/DatabaseStorageController.php
@@ -8,6 +8,8 @@
 namespace Drupal\entity;
 
 use PDO;
+use Drupal\Component\Uuid\Uuid;
+
 
 /**
  * Defines a base entity controller class.
@@ -59,6 +61,15 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
   protected $idKey;
 
   /**
+   * Name of entity's UUID database table field, if it supports UUIDs.
+   *
+   * Has the value FALSE if this entity does not use UUIDs.
+   *
+   * @var string
+   */
+  protected $uuidKey;
+
+  /**
    * Name of entity's revision database table field, if it supports revisions.
    *
    * Has the value FALSE if this entity does not use revisions.
@@ -95,6 +106,14 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
     $this->hookLoadArguments = array();
     $this->idKey = $this->entityInfo['entity keys']['id'];
 
+    // Check if the entity type supports UUIDs.
+    if (!empty($this->entityInfo['entity keys']['uuid'])) {
+      $this->uuidKey = $this->entityInfo['entity keys']['uuid'];
+    }
+    else {
+      $this->uuidKey = FALSE;
+    }
+
     // Check if the entity type supports revisions.
     if (!empty($this->entityInfo['entity keys']['revision'])) {
       $this->revisionKey = $this->entityInfo['entity keys']['revision'];
@@ -366,7 +385,16 @@ class DatabaseStorageController implements EntityStorageControllerInterface {
    */
   public function create(array $values) {
     $class = isset($this->entityInfo['entity class']) ? $this->entityInfo['entity class'] : 'Drupal\entity\Entity';
-    return new $class($values, $this->entityType);
+
+    $entity = new $class($values, $this->entityType);
+
+    // Assign a new UUID if there is none yet.
+    if ($this->uuidKey && !isset($entity->{$this->uuidKey})) {
+      $uuid = new Uuid();
+      $entity->{$this->uuidKey} = $uuid->generate();
+    }
+
+    return $entity;
   }
 
   /**
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityUuidTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityUuidTest.php
new file mode 100644
index 0000000..f416e05
--- /dev/null
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityUuidTest.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\entity\Tests\EntityUuidTest.
+ */
+
+namespace Drupal\entity\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests related to node types.
+ */
+class EntityUuidTest extends WebTestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Entity UUID',
+      'description' => 'Ensures that UUIDs are saved and loaded successfully on UUID-capable entities.',
+      'group' => 'Entity API',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('entity_test');
+  }
+
+  /**
+   * Test UUID generation on entities.
+   */
+  function testEntityUuidCreation() {
+    $entity = entity_create('entity_test', array('name' => 'test'));
+    $entity->save();
+    $this->assertTrue(strlen($entity->get('uuid')) == 36, 'Check that UUID length is 36');
+  }
+
+  /**
+   * Test saving and loading nodes with UUIDs.
+   */
+  function testEntityUuidNode() {
+    // Create two nodes.
+    $node1 = $this->drupalCreateNode();
+    $node2 = $this->drupalCreateNode();
+
+    // Make sure node saves are generating unique UUIDs.
+    $this->assertNotEqual($node1->get('uuid'), $node2->get('uuid'), 'Check that UUIDs are different');
+
+    // Check to make sure UUID did not get truncated when saving to {node}.
+    $this->assertTrue(strlen($node1->get('uuid')) == 36, 'Check that UUID length is 36');
+
+    // Check for UUID preservation on an entity resave.
+    $node1_reloaded = node_load($node1->nid);
+    node_save($node1_reloaded);
+    $this->assertEqual($node1->get('uuid'), $node1_reloaded->get('uuid'), 'Check that UUID did not change on node save.');
+  }
+
+  /**
+   * Test loading entities by UUIDs.
+   */
+  function testEntityLoadByUuid() {
+    $entity1 = entity_create('entity_test', array('name' => 'test1'));
+    $entity1->save();
+
+    $entity_loaded = entity_load_by_uuid('entity_test', $entity1->get('uuid'));
+
+    $this->assertEqual($entity1->id(), $entity_loaded->id(), 'Check that load by UUID loaded the same entity successfully.');
+
+    $entity1->save();
+
+    $this->assertEqual($entity1->get('uuid'), $entity_loaded->get('uuid'), 'Check that UUID did not change on entity save.');
+  }
+
+}
diff --git a/core/modules/entity/tests/modules/entity_test/entity_test.install b/core/modules/entity/tests/modules/entity_test/entity_test.install
index c0c7703..fb0711d 100644
--- a/core/modules/entity/tests/modules/entity_test/entity_test.install
+++ b/core/modules/entity/tests/modules/entity_test/entity_test.install
@@ -43,6 +43,13 @@ function entity_test_schema() {
         'not null' => TRUE,
         'description' => 'Primary Key: Unique entity-test item ID.',
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the entity.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'name' => array(
         'description' => 'The name of the test entity.',
         'type' => 'varchar',
@@ -67,6 +74,7 @@ function entity_test_schema() {
     ),
     'indexes' => array(
       'uid' => array('uid'),
+      'uuid' => array('uuid'),
     ),
     'foreign keys' => array(
       'uid' => array('users' => 'uid'),
diff --git a/core/modules/entity/tests/modules/entity_test/entity_test.module b/core/modules/entity/tests/modules/entity_test/entity_test.module
index f97d2e9..67c3085 100644
--- a/core/modules/entity/tests/modules/entity_test/entity_test.module
+++ b/core/modules/entity/tests/modules/entity_test/entity_test.module
@@ -17,6 +17,7 @@ function entity_test_entity_info() {
     'fieldable' => TRUE,
     'entity keys' => array(
       'id' => 'id',
+      'uuid' => 'uuid',
     ),
   );
   // Optionally specify a translation handler for testing translations.
diff --git a/core/modules/node/lib/Drupal/node/Node.php b/core/modules/node/lib/Drupal/node/Node.php
index cee6967..fad5c4f 100644
--- a/core/modules/node/lib/Drupal/node/Node.php
+++ b/core/modules/node/lib/Drupal/node/Node.php
@@ -29,6 +29,13 @@ class Node extends Entity {
   public $vid;
 
   /**
+   * The node UUID.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
    * The node content type (bundle).
    *
    * @var string
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index 7382320..9c0d4ca 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -27,6 +27,13 @@ function node_schema() {
         'not null' => FALSE,
         'default' => NULL,
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the node.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'type' => array(
         'description' => 'The {node_type}.type of this node.',
         'type' => 'varchar',
@@ -114,6 +121,7 @@ function node_schema() {
       'uid'                 => array('uid'),
       'tnid'                => array('tnid'),
       'translate'           => array('translate'),
+      'uuid'                => array('uuid'),
     ),
     'unique keys' => array(
       'vid' => array('vid'),
@@ -568,6 +576,33 @@ function node_update_8003() {
 }
 
 /**
+ * Create a UUID column for nodes.
+ *
+ * @todo UUID upgrade path: http://drupal.org/node/1642526
+ */
+function node_update_8004() {
+  $spec = array(
+    'description' => 'The universally unique identifier for the node.',
+    'type' => 'varchar',
+    'length' => 128,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys = array(
+    'indexes' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  // Account for sites having the contributed UUID module installed.
+  if (db_field_exists('node', 'uuid')) {
+    db_change_field('node', 'uuid', 'uuid', $spec, $keys);
+  }
+  else {
+    db_add_field('node', 'uuid', $spec, $keys);
+  }
+}
+
+/**
  * @} End of "addtogroup updates-7.x-to-8.x"
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 49d20a7..9f77373 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -204,6 +204,7 @@ function node_entity_info() {
         'revision' => 'vid',
         'bundle' => 'type',
         'label' => 'title',
+        'uuid' => 'uuid',
       ),
       'bundle keys' => array(
         'bundle' => 'type',
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 9ba7c4c..63dbfb2 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -866,6 +866,13 @@ function system_schema() {
         'unsigned' => TRUE,
         'not null' => TRUE,
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the file.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'uid' => array(
         'description' => 'The {users}.uid of the user who is associated with the file.',
         'type' => 'int',
@@ -929,6 +936,7 @@ function system_schema() {
       'uid' => array('uid'),
       'status' => array('status'),
       'timestamp' => array('timestamp'),
+      'uuid' => array('uuid'),
     ),
     'unique keys' => array(
       'uri' => array('uri'),
@@ -1925,6 +1933,33 @@ function system_update_8010() {
 }
 
 /**
+ * Create a UUID column for managed files.
+ *
+ * @todo UUID upgrade path: http://drupal.org/node/1642526
+ */
+function system_update_8011() {
+  $spec = array(
+    'description' => 'The universally unique identifier for the file.',
+    'type' => 'varchar',
+    'length' => 128,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys = array(
+    'indexes' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  // Account for sites having the contributed UUID module installed.
+  if (db_field_exists('file_managed', 'uuid')) {
+    db_change_field('file_managed', 'uuid', 'uuid', $spec, $keys);
+  }
+  else {
+    db_add_field('file_managed', 'uuid', $spec, $keys);
+  }
+}
+
+/**
  * @} End of "defgroup updates-7.x-to-8.x".
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index b9558e5..1de28fe 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -279,6 +279,7 @@ function system_entity_info() {
       'entity keys' => array(
         'id' => 'fid',
         'label' => 'filename',
+        'uuid' => 'uuid',
       ),
       'static cache' => FALSE,
     ),
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Term.php
index f036f18..929422c 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Term.php
@@ -22,6 +22,13 @@ class Term extends Entity {
   public $tid;
 
   /**
+   * The term UUID.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
    * The taxonomy vocabulary ID this term belongs to.
    *
    * @var integer
diff --git a/core/modules/taxonomy/taxonomy.install b/core/modules/taxonomy/taxonomy.install
index 14b6956..d296036 100644
--- a/core/modules/taxonomy/taxonomy.install
+++ b/core/modules/taxonomy/taxonomy.install
@@ -32,6 +32,13 @@ function taxonomy_schema() {
         'not null' => TRUE,
         'description' => 'Primary Key: Unique term ID.',
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the term.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'vid' => array(
         'type' => 'int',
         'unsigned' => TRUE,
@@ -85,6 +92,7 @@ function taxonomy_schema() {
       'taxonomy_tree' => array('vid', 'weight', 'name'),
       'vid_name' => array('vid', 'name'),
       'name' => array('name'),
+      'uuid' => array('uuid'),
     ),
   );
 
@@ -300,3 +308,30 @@ function taxonomy_update_8001() {
     }
   }
 }
+
+/**
+ * Create a UUID column for taxonomy terms.
+ *
+ * @todo UUID upgrade path: http://drupal.org/node/1642526
+ */
+function taxonomy_update_8002() {
+  $spec = array(
+    'description' => 'The universally unique identifier for the term.',
+    'type' => 'varchar',
+    'length' => 128,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys = array(
+    'indexes' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  // Account for sites having the contributed UUID module installed.
+  if (db_field_exists('taxonomy_term_data', 'uuid')) {
+    db_change_field('taxonomy_term_data', 'uuid', 'uuid', $spec, $keys);
+  }
+  else {
+    db_add_field('taxonomy_term_data', 'uuid', $spec, $keys);
+  }
+}
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 6697a0a..b31bab9 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -120,6 +120,7 @@ function taxonomy_entity_info() {
         'id' => 'tid',
         'bundle' => 'vocabulary_machine_name',
         'label' => 'name',
+        'uuid' => 'uuid',
       ),
       'bundle keys' => array(
         'bundle' => 'machine_name',
diff --git a/core/modules/user/lib/Drupal/user/User.php b/core/modules/user/lib/Drupal/user/User.php
index 992923c..25e27f1 100644
--- a/core/modules/user/lib/Drupal/user/User.php
+++ b/core/modules/user/lib/Drupal/user/User.php
@@ -22,6 +22,13 @@ class User extends Entity {
   public $uid;
 
   /**
+   * The user UUID.
+   *
+   * @var string
+   */
+  public $uuid;
+
+  /**
    * The unique user name.
    *
    * @var string
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 5ec57da..2de1b24 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -132,6 +132,13 @@ function user_schema() {
         'description' => 'Primary Key: Unique user ID.',
         'default' => 0,
       ),
+      'uuid' => array(
+        'description' => 'The universally unique identifier for the user.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'name' => array(
         'type' => 'varchar',
         'length' => 60,
@@ -244,6 +251,7 @@ function user_schema() {
       'created' => array('created'),
       'mail' => array('mail'),
       'picture' => array('picture'),
+      'uuid' => array('uuid'),
     ),
     'unique keys' => array(
       'name' => array('name'),
@@ -442,5 +450,32 @@ function user_update_8002() {
 }
 
 /**
+ * Create a UUID column for users.
+ *
+ * @todo UUID upgrade path: http://drupal.org/node/1642526
+ */
+function user_update_8003() {
+  $spec = array(
+    'description' => 'The universally unique identifier for the user.',
+    'type' => 'varchar',
+    'length' => 128,
+    'not null' => TRUE,
+    'default' => '',
+  );
+  $keys = array(
+    'indexes' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  // Account for sites having the contributed UUID module installed.
+  if (db_field_exists('users', 'uuid')) {
+    db_change_field('users', 'uuid', 'uuid', $spec, $keys);
+  }
+  else {
+    db_add_field('users', 'uuid', $spec, $keys);
+  }
+}
+
+/**
  * @} End of "addtogroup updates-7.x-to-8.x".
  */
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 89706c4..b41f359 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -154,6 +154,7 @@ function user_entity_info() {
       'entity class' => 'Drupal\user\User',
       'entity keys' => array(
         'id' => 'uid',
+        'uuid' => 'uuid',
       ),
       'bundles' => array(
         'user' => array(
