diff --git a/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php b/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
index ccbe1a9d262d29b448afdde2224961b88b2c2029..e4ba1d69f3ec56ef3deb51266964ae5dcce306f7 100644
--- a/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
+++ b/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
@@ -9,6 +9,7 @@
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Field\EntityReferenceFieldItemList;
 
 /**
  * The media library opener for field widgets.
@@ -95,7 +96,9 @@ public function checkAccess(MediaLibraryState $state, AccountInterface $account)
     $items = $entity->get($field_name);
     $field_definition = $items->getFieldDefinition();
 
-    if ($field_definition->getType() !== 'entity_reference') {
+    // Check that the field is an entity reference, or subclass of it, since we
+    // need to check the target_type setting.
+    if (!$items instanceof EntityReferenceFieldItemList) {
       throw new \LogicException('Expected the media library to be opened by an entity reference field.');
     }
     if ($field_definition->getFieldStorageDefinition()->getSetting('target_type') !== 'media') {
diff --git a/core/modules/media_library/tests/modules/media_library_test/config/schema/media_library_test.yml b/core/modules/media_library/tests/modules/media_library_test/config/schema/media_library_test.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ac8f8c9fa2142bece995161d43e203ac2ee1d29a
--- /dev/null
+++ b/core/modules/media_library/tests/modules/media_library_test/config/schema/media_library_test.yml
@@ -0,0 +1,7 @@
+field.storage_settings.entity_reference_subclass:
+  type: base_entity_reference_field_settings
+  label: 'Entity reference subclass field storage settings'
+
+field.field_settings.entity_reference_subclass:
+  type: field.field_settings.entity_reference
+  label: 'Entity reference subclass field settings'
diff --git a/core/modules/media_library/tests/modules/media_library_test/media_library_test.module b/core/modules/media_library/tests/modules/media_library_test/media_library_test.module
index 20a285d53cac767d820c3c77ca3cf5005a74adf5..26d0362e17fb1a581c8a0a24e106986a747b2520 100644
--- a/core/modules/media_library/tests/modules/media_library_test/media_library_test.module
+++ b/core/modules/media_library/tests/modules/media_library_test/media_library_test.module
@@ -39,3 +39,10 @@ function media_library_test_entity_type_alter(array &$entity_types) {
     $entity_types['node']->setFormClass('edit', TestNodeFormOverride::class);
   }
 }
+
+/**
+ * Implements hook_field_widget_info_alter().
+ */
+function media_library_test_field_widget_info_alter(array &$info) {
+  $info['media_library_widget']['field_types'][] = 'entity_reference_subclass';
+}
diff --git a/core/modules/media_library/tests/modules/media_library_test/src/Plugin/Field/FieldType/EntityReferenceItemSubclass.php b/core/modules/media_library/tests/modules/media_library_test/src/Plugin/Field/FieldType/EntityReferenceItemSubclass.php
new file mode 100644
index 0000000000000000000000000000000000000000..e065d3aed4fecff5c567e47fa9515c5161dd84af
--- /dev/null
+++ b/core/modules/media_library/tests/modules/media_library_test/src/Plugin/Field/FieldType/EntityReferenceItemSubclass.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Drupal\media_library_test\Plugin\Field\FieldType;
+
+use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
+
+/**
+ * Plugin implementation of the 'entity_reference_subclass' field type.
+ *
+ * @FieldType(
+ *   id = "entity_reference_subclass",
+ *   label = @Translation("Entity reference subclass"),
+ *   description = @Translation("An entity field containing an entity reference."),
+ *   category = @Translation("Reference"),
+ *   default_widget = "entity_reference_autocomplete",
+ *   default_formatter = "entity_reference_label",
+ *   list_class = "\Drupal\Core\Field\EntityReferenceFieldItemList"
+ * )
+ */
+class EntityReferenceItemSubclass extends EntityReferenceItem {
+}
diff --git a/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php b/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
index b8fa3d268c2cf3ca97baf45e6e5059b01c3332a9..e61776238f042f642545c9bce34cd88804b4f4f0 100644
--- a/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
+++ b/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
@@ -256,12 +256,30 @@ public function testFieldWidgetEntityEditAccess() {
     $this->assertAccess($access_result, TRUE, NULL, Views::getView('media_library')->storage->getCacheTags(), ['url.query_args', 'user.permissions']);
   }
 
+  /**
+   * Data provider for ::testFieldWidgetEntityFieldAccess().
+   *
+   * @return array[]
+   *   Sets of arguments to pass to the test method.
+   */
+  public function providerFieldWidgetEntityFieldAccess(): array {
+    return [
+      ['entity_reference'],
+      ['entity_reference_subclass'],
+    ];
+  }
+
   /**
    * Tests that the field widget opener respects entity field-level access.
+   *
+   * @param string $field_type
+   *   The field type.
+   *
+   * @dataProvider providerFieldWidgetEntityFieldAccess
    */
-  public function testFieldWidgetEntityFieldAccess() {
+  public function testFieldWidgetEntityFieldAccess(string $field_type) {
     $field_storage = FieldStorageConfig::create([
-      'type' => 'entity_reference',
+      'type' => $field_type,
       'entity_type' => 'entity_test',
       // The media_library_test module will deny access to this field.
       // @see media_library_test_entity_field_access()