diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 7a45d10..00a5635 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2335,11 +2335,10 @@ function drupal_common_theme() {
       'variables' => array('items' => NULL, 'active' => NULL,  'variant' => NULL),
       'template' => 'task-list',
     ),
-    'authorize_message' => array(
-      'variables' => array('message' => NULL, 'success' => TRUE),
-    ),
     'authorize_report' => array(
-      'variables' => array('messages' => array()),
+      'variables' => array('messages' => array(), 'attributes' => array()),
+      'includes' => array('core/includes/theme.maintenance.inc'),
+      'template' => 'authorize-report',
     ),
     // From pager.inc.
     'pager' => array(
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 8d4c10d..d5ad5b9 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -104,64 +104,46 @@ function _drupal_maintenance_theme() {
 }
 
 /**
- * Returns HTML for a results report of an operation run by authorize.php.
+ * Prepares variables for authorize.php operation report templates.
  *
- * @param $variables
+ * This report displays the results of an operation run via authorize.php.
+ *
+ * Default template: authorize-report.html.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - messages: An array of result messages.
  *
- * @ingroup themeable
  */
-function theme_authorize_report($variables) {
+function template_preprocess_authorize_report(&$variables) {
   $messages = $variables['messages'];
-  $output = '';
+  $variables['report'] = array();
   if (!empty($messages)) {
-    $output .= '<div id="authorize-results">';
+    $variables['attributes']['id'] = 'authorize-results';
     foreach ($messages as $heading => $logs) {
       $items = array();
       foreach ($logs as $number => $log_message) {
         if ($number === '#abort') {
           continue;
         }
-        $authorize_message = array(
-          '#theme' => 'authorize_message',
-          '#message' => $log_message['message'],
-          '#success' => $log_message['success'],
+        if ($log_message['success']) {
+          $message = $log_message['message'];
+          $classes = array('success');
+        }
+        else {
+          $message = '<strong>' . $log_message['message'] . '</strong>';
+          $classes = array('failure');
+        }
+        $items[] = array(
+          '#wrapper_attributes' => array('class' => $classes),
+          '#markup' => $message,
         );
-        $items[] = drupal_render($authorize_message);
       }
-      $item_list = array(
+      $variables['report'][] = array(
         '#theme' => 'item_list',
         '#items' => $items,
         '#title' => $heading,
       );
-      $output .= drupal_render($item_list);
     }
-    $output .= '</div>';
-  }
-  return $output;
-}
-
-/**
- * Returns HTML for a single log message from the authorize.php batch operation.
- *
- * @param $variables
- *   An associative array containing:
- *   - message: The log message.
- *     It's the caller's responsibility to ensure this string contains no
- *     dangerous HTML such as SCRIPT tags.
- *   - success: A boolean indicating failure or success.
- *
- * @ingroup themeable
- */
-function theme_authorize_message($variables) {
-  $message = $variables['message'];
-  $success = $variables['success'];
-  if ($success) {
-    $item = array('data' => $message, 'class' => array('success'));
-  }
-  else {
-    $item = array('data' => '<strong>' . $message . '</strong>', 'class' => array('failure'));
   }
-  return $item;
 }
diff --git a/core/modules/system/templates/authorize-report.html.twig b/core/modules/system/templates/authorize-report.html.twig
new file mode 100644
index 0000000..e3c5dbb
--- /dev/null
+++ b/core/modules/system/templates/authorize-report.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Default theme implementation for authorize.php operation report templates.
+ *
+ * This report displays the results of an operation run via authorize.php.
+ *
+ * Available variables:
+ * - report: A list of result messages.
+ * - attributes: HTML attributes for the element.
+ *
+ * @see template_preprocess_authorize_report()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if report %}
+  <div{{ attributes }}>
+    {% for messages in report %}
+      {{ messages }}
+    {% endfor %}
+  </div>
+{% endif %}
