diff --git a/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php b/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
index ff6abcd0d5..8617dc5dfc 100644
--- a/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\user\EntityOwnerTrait;
+
 /**
  * Provides a base entity class with extended revision and publishing support.
  *
@@ -10,6 +12,7 @@
 abstract class EditorialContentEntityBase extends ContentEntityBase implements EntityChangedInterface, EntityPublishedInterface, RevisionLogInterface {
 
   use EntityChangedTrait;
+  use EntityOwnerTrait;
   use EntityPublishedTrait;
   use RevisionLogEntityTrait;
 
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index 821b30d0ba..d7b45f78c2 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\user\Entity\User;
-use Drupal\user\UserInterface;
+use Drupal\user\EntityOwnerTrait;
 
 /**
  * Defines the comment entity class.
@@ -70,6 +70,7 @@ class Comment extends ContentEntityBase implements CommentInterface {
 
   use EntityChangedTrait;
   use EntityPublishedTrait;
+  use EntityOwnerTrait;
 
   /**
    * The thread for which a lock was acquired.
@@ -259,12 +260,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ])
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
+    $fields['uid'] = static::getOwnerFieldDefinition()
       ->setLabel(t('User ID'))
       ->setDescription(t('The user ID of the comment author.'))
       ->setTranslatable(TRUE)
-      ->setSetting('target_type', 'user')
-      ->setDefaultValue(0);
+      ->setRevisionable(FALSE);
 
     $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
@@ -527,29 +527,6 @@ public function getOwner() {
   }
 
   /**
-   * {@inheritdoc}
-   */
-  public function getOwnerId() {
-    return $this->get('uid')->target_id;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setOwnerId($uid) {
-    $this->set('uid', $uid);
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setOwner(UserInterface $account) {
-    $this->set('uid', $account->id());
-    return $this;
-  }
-
-  /**
    * Get the comment type ID for this comment.
    *
    * @return string
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index a68b9bae9b..b43709ed4f 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -8,6 +8,7 @@
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\file\FileInterface;
+use Drupal\user\EntityOwnerTrait;
 use Drupal\user\UserInterface;
 
 /**
@@ -36,6 +37,7 @@
 class File extends ContentEntityBase implements FileInterface {
 
   use EntityChangedTrait;
+  use EntityOwnerTrait;
 
   /**
    * {@inheritdoc}
@@ -112,36 +114,6 @@ public function getCreatedTime() {
   /**
    * {@inheritdoc}
    */
-  public function getOwner() {
-    return $this->get('uid')->entity;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getOwnerId() {
-    return $this->get('uid')->target_id;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setOwnerId($uid) {
-    $this->set('uid', $uid);
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setOwner(UserInterface $account) {
-    $this->set('uid', $account->id());
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isPermanent() {
     return $this->get('status')->value == FILE_STATUS_PERMANENT;
   }
@@ -231,10 +203,10 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields['langcode']->setLabel(t('Language code'))
       ->setDescription(t('The file language code.'));
 
-    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
+    $fields['uid'] = static::getOwnerFieldDefinition()
       ->setLabel(t('User ID'))
       ->setDescription(t('The user ID of the file.'))
-      ->setSetting('target_type', 'user');
+      ->setRevisionable(FALSE);
 
     $fields['filename'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Filename'))
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index 74a7c0bc3e..01b72a3952 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -252,13 +252,6 @@ public function setSticky($sticky) {
   /**
    * {@inheritdoc}
    */
-  public function getOwner() {
-    return $this->get('uid')->entity;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function getOwnerId() {
     return $this->getEntityKey('uid');
   }
@@ -266,16 +259,15 @@ public function getOwnerId() {
   /**
    * {@inheritdoc}
    */
-  public function setOwnerId($uid) {
-    $this->set('uid', $uid);
-    return $this;
+  public function getRevisionCreationTime() {
+    return $this->get('revision_timestamp')->value;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function setOwner(UserInterface $account) {
-    $this->set('uid', $account->id());
+  public function setRevisionCreationTime($timestamp) {
+    $this->set('revision_timestamp', $timestamp);
     return $this;
   }
 
@@ -317,12 +309,9 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ])
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
+    $fields['uid'] = static::getOwnerFieldDefinition()
       ->setLabel(t('Authored by'))
       ->setDescription(t('The username of the content author.'))
-      ->setRevisionable(TRUE)
-      ->setSetting('target_type', 'user')
-      ->setDefaultValueCallback('Drupal\node\Entity\Node::getCurrentUserId')
       ->setTranslatable(TRUE)
       ->setDisplayOptions('view', [
         'label' => 'hidden',
diff --git a/core/modules/user/src/EntityOwnerTrait.php b/core/modules/user/src/EntityOwnerTrait.php
new file mode 100644
index 0000000000..26626796bc
--- /dev/null
+++ b/core/modules/user/src/EntityOwnerTrait.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\user;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+
+/**
+ * Trait implementing the various methods defined in EntityOwnerInterface.
+ *
+ * @see \Drupal\user\EntityOwnerInterface
+ */
+trait EntityOwnerTrait {
+
+  /**
+   * Defines 'uid' base field definition.
+   *
+   * @return \Drupal\Core\Field\BaseFieldDefinition
+   *   A field definition object.
+   */
+  public static function getOwnerFieldDefinition() {
+    return BaseFieldDefinition::create('entity_reference')
+      ->setLabel(t('Owner'))
+      ->setRevisionable(TRUE)
+      ->setSetting('target_type', 'user')
+      ->setDisplayOptions('form', array(
+        'type' => 'entity_reference_autocomplete',
+        'weight' => 5,
+        'settings' => array(
+          'match_operator' => 'CONTAINS',
+          'size' => '60',
+          'placeholder' => '',
+        ),
+      ))
+      ->setDefaultValueCallback('Drupal\user\EntityOwnerTrait::getDefaultOwnerId');
+  }
+
+  /**
+   * Default value callback for 'uid' base field definition.
+   *
+   * @see ::baseFieldDefinitions()
+   *
+   * @return int
+   *   The user ID.
+   */
+  public static function getDefaultOwnerId() {
+    return \Drupal::currentUser()->id();
+  }
+
+  /**
+   * Returns the entity owner's user entity.
+   *
+   * @return \Drupal\user\UserInterface
+   *   The owner user entity.
+   */
+  public function getOwner() {
+    return $this->get('uid')->entity;
+  }
+
+  /**
+   * Sets the entity owner's user entity.
+   *
+   * @param \Drupal\user\UserInterface $account
+   *   The owner user entity.
+   *
+   * @return $this
+   */
+  public function setOwner(UserInterface $account) {
+    $this->set('uid', $account->id());
+    return $this;
+  }
+
+  /**
+   * Returns the entity owner's user ID.
+   *
+   * @return int|null
+   *   The owner user ID, or NULL in case the user ID field has not been set on
+   *   the entity.
+   */
+  public function getOwnerId() {
+    return $this->get('uid')->target_id;
+  }
+
+  /**
+   * Sets the entity owner's user ID.
+   *
+   * @param int $uid
+   *   The owner user id.
+   *
+   * @return $this
+   */
+  public function setOwnerId($uid) {
+    $this->set('uid', $uid);
+    return $this;
+  }
+
+}
