diff --git a/jsonapi.services.yml b/jsonapi.services.yml
index e66e5b5..9e5d3c7 100644
--- a/jsonapi.services.yml
+++ b/jsonapi.services.yml
@@ -1,6 +1,7 @@
 services:
   serializer.normalizer.sort.jsonapi:
     class: Drupal\jsonapi\Normalizer\SortNormalizer
+    arguments: ['@jsonapi.field_resolver']
     tags:
       - { name: normalizer }
   serializer.normalizer.offset_page.jsonapi:
diff --git a/src/Normalizer/SortNormalizer.php b/src/Normalizer/SortNormalizer.php
index 5dd0810..3652b73 100644
--- a/src/Normalizer/SortNormalizer.php
+++ b/src/Normalizer/SortNormalizer.php
@@ -3,6 +3,7 @@
 namespace Drupal\jsonapi\Normalizer;
 
 use Drupal\jsonapi\Query\Sort;
+use Drupal\jsonapi\Context\FieldResolver;
 use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
 use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
 
@@ -20,6 +21,20 @@ class SortNormalizer implements DenormalizerInterface {
    */
   protected $supportedInterfaceOrClass = Sort::class;
 
+  /**
+   * The field resolver service.
+   *
+   * @var \Drupal\jsonapi\Context\FieldResolver
+   */
+  protected $fieldResolver;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(FieldResolver $field_resolver) {
+    $this->fieldResolver = $field_resolver;
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -32,6 +47,14 @@ class SortNormalizer implements DenormalizerInterface {
    */
   public function denormalize($data, $class, $format = NULL, array $context = []) {
     $expanded = $this->expand($data);
+    $expanded = array_map(function ($item) use ($context) {
+      $item[Sort::PATH_KEY] = $this->fieldResolver->resolveInternal(
+        $context['entity_type_id'],
+        $context['bundle'],
+        $item[Sort::PATH_KEY]
+      );
+      return $item;
+    }, $expanded);
     return new Sort($expanded);
   }
 
diff --git a/src/Routing/JsonApiParamEnhancer.php b/src/Routing/JsonApiParamEnhancer.php
index c43bfbb..c7faa56 100644
--- a/src/Routing/JsonApiParamEnhancer.php
+++ b/src/Routing/JsonApiParamEnhancer.php
@@ -73,7 +73,7 @@ class JsonApiParamEnhancer implements RouteEnhancerInterface {
 
     if ($request->query->has('sort')) {
       $sort = $request->query->get('sort');
-      $options['sort'] = $this->sortNormalizer->denormalize($sort, Sort::class);
+      $options['sort'] = $this->sortNormalizer->denormalize($sort, Sort::class, NULL, $context);
     }
 
     $page = ($request->query->has('page')) ? $request->query->get('page') : [];
diff --git a/tests/src/Kernel/Normalizer/SortNormalizerTest.php b/tests/src/Kernel/Normalizer/SortNormalizerTest.php
index b430eb0..81a3e28 100644
--- a/tests/src/Kernel/Normalizer/SortNormalizerTest.php
+++ b/tests/src/Kernel/Normalizer/SortNormalizerTest.php
@@ -3,7 +3,9 @@
 namespace Drupal\Tests\jsonapi\Kernel\Normalizer;
 
 use Drupal\KernelTests\KernelTestBase;
+use Drupal\jsonapi\Context\FieldResolver;
 use Drupal\jsonapi\Query\Sort;
+use Prophecy\Argument;
 
 /**
  * @coversDefaultClass \Drupal\jsonapi\Normalizer\SortNormalizer
@@ -34,6 +36,7 @@ class SortNormalizerTest extends KernelTestBase {
    */
   public function setUp() {
     parent::setUp();
+    $this->container->set('jsonapi.field_resolver', $this->getFieldResolver('foo', 'bar'));
     $this->normalizer = $this->container->get('serializer.normalizer.sort.jsonapi');
   }
 
@@ -42,7 +45,7 @@ class SortNormalizerTest extends KernelTestBase {
    * @dataProvider denormalizeProvider
    */
   public function testDenormalize($input, $expected) {
-    $sort = $this->normalizer->denormalize($input, Sort::class);
+    $sort = $this->normalizer->denormalize($input, Sort::class, NULL, ['entity_type_id' => 'foo', 'bundle' => 'bar']);
     foreach ($sort->fields() as $index => $sort_field) {
       $this->assertEquals($expected[$index]['path'], $sort_field['path']);
       $this->assertEquals($expected[$index]['direction'], $sort_field['direction']);
@@ -55,16 +58,16 @@ class SortNormalizerTest extends KernelTestBase {
    */
   public function denormalizeProvider() {
     return [
-      ['lorem', [['path' => 'lorem', 'direction' => 'ASC', 'langcode' => NULL]]],
-      ['-lorem', [['path' => 'lorem', 'direction' => 'DESC', 'langcode' => NULL]]],
+      ['lorem', [['path' => 'foo', 'direction' => 'ASC', 'langcode' => NULL]]],
+      ['-lorem', [['path' => 'foo', 'direction' => 'DESC', 'langcode' => NULL]]],
       ['-lorem,ipsum', [
-        ['path' => 'lorem', 'direction' => 'DESC', 'langcode' => NULL],
-        ['path' => 'ipsum', 'direction' => 'ASC', 'langcode' => NULL],
+        ['path' => 'foo', 'direction' => 'DESC', 'langcode' => NULL],
+        ['path' => 'bar', 'direction' => 'ASC', 'langcode' => NULL],
       ],
       ],
       ['-lorem,-ipsum', [
-        ['path' => 'lorem', 'direction' => 'DESC', 'langcode' => NULL],
-        ['path' => 'ipsum', 'direction' => 'DESC', 'langcode' => NULL],
+        ['path' => 'foo', 'direction' => 'DESC', 'langcode' => NULL],
+        ['path' => 'bar', 'direction' => 'DESC', 'langcode' => NULL],
       ],
       ],
       [[
@@ -73,10 +76,10 @@ class SortNormalizerTest extends KernelTestBase {
         ['path' => 'dolor', 'direction' => 'ASC', 'langcode' => 'ca'],
         ['path' => 'sit', 'direction' => 'DESC', 'langcode' => 'ca'],
       ], [
-        ['path' => 'lorem', 'direction' => 'ASC', 'langcode' => NULL],
-        ['path' => 'ipsum', 'direction' => 'ASC', 'langcode' => 'ca'],
-        ['path' => 'dolor', 'direction' => 'ASC', 'langcode' => 'ca'],
-        ['path' => 'sit', 'direction' => 'DESC', 'langcode' => 'ca'],
+        ['path' => 'foo', 'direction' => 'ASC', 'langcode' => NULL],
+        ['path' => 'bar', 'direction' => 'ASC', 'langcode' => 'ca'],
+        ['path' => 'baz', 'direction' => 'ASC', 'langcode' => 'ca'],
+        ['path' => 'qux', 'direction' => 'DESC', 'langcode' => 'ca'],
       ],
       ],
     ];
@@ -101,4 +104,16 @@ class SortNormalizerTest extends KernelTestBase {
     ];
   }
 
+  /**
+   * Provides a mock field resolver.
+   */
+  protected function getFieldResolver($entity_type_id, $bundle) {
+    $field_resolver = $this->prophesize(FieldResolver::class);
+    $field_resolver->resolveInternal('foo', 'bar', 'lorem')->willReturn('foo');
+    $field_resolver->resolveInternal('foo', 'bar', 'ipsum')->willReturn('bar');
+    $field_resolver->resolveInternal('foo', 'bar', 'dolor')->willReturn('baz');
+    $field_resolver->resolveInternal('foo', 'bar', 'sit')->willReturn('qux');
+    return $field_resolver->reveal();
+  }
+
 }
diff --git a/tests/src/Unit/Routing/JsonApiParamEnhancerTest.php b/tests/src/Unit/Routing/JsonApiParamEnhancerTest.php
index 7fac8b0..514b293 100644
--- a/tests/src/Unit/Routing/JsonApiParamEnhancerTest.php
+++ b/tests/src/Unit/Routing/JsonApiParamEnhancerTest.php
@@ -122,7 +122,12 @@ class JsonApiParamEnhancerTest extends UnitTestCase {
     )->willReturn($this->prophesize(Filter::class)->reveal());
 
     $sort_normalizer = $this->prophesize(DenormalizerInterface::class);
-    $sort_normalizer->denormalize(Argument::any(), Sort::class)->willReturn($this->prophesize(Sort::class)->reveal());
+    $sort_normalizer->denormalize(
+      Argument::any(),
+      Sort::class,
+      Argument::any(),
+      Argument::any()
+    )->willReturn($this->prophesize(Sort::class)->reveal());
 
     $page_normalizer = $this->prophesize(DenormalizerInterface::class);
     $page_normalizer->denormalize(Argument::any(), OffsetPage::class)->willReturn($this->prophesize(OffsetPage::class)->reveal());
