diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index a7c9e5d..9922c04 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -20,12 +20,6 @@
 #include "quiche/quic/core/quic_versions.h"
 #include "quiche/common/platform/api/quiche_export.h"
 
-// the draft-02 spec makes AUTH_INFO unparseable in SUBSCRIBE messages. This
-// flag assumes that the num_parameters field exists so that it is parseable.
-// If false, there is no num_parameters field and there must not be an
-// AUTH_INFO field.
-#define MOQT_AUTH_INFO
-
 namespace moqt {
 
 inline constexpr quic::ParsedQuicVersionVector GetMoqtSupportedQuicVersions() {
@@ -218,9 +212,7 @@
   std::optional<MoqtSubscribeLocation> start_object;
   std::optional<MoqtSubscribeLocation> end_group;
   std::optional<MoqtSubscribeLocation> end_object;
-#ifdef MOQT_AUTH_INFO
   std::optional<absl::string_view> authorization_info;
-#endif
 };
 
 struct QUICHE_EXPORT MoqtSubscribeOk {
diff --git a/quiche/quic/moqt/moqt_parser.cc b/quiche/quic/moqt/moqt_parser.cc
index ac72183..96c8a92 100644
--- a/quiche/quic/moqt/moqt_parser.cc
+++ b/quiche/quic/moqt/moqt_parser.cc
@@ -382,7 +382,6 @@
         "or both non_None");
     return 0;
   }
-#ifdef MOQT_AUTH_INFO
   uint64_t num_params;
   if (!reader.ReadVarInt62(&num_params)) {
     return 0;
@@ -409,7 +408,6 @@
         break;
     }
   }
-#endif
   visitor_.OnSubscribeMessage(subscribe_request);
   return reader.PreviouslyReadPayload().length();
 }
diff --git a/quiche/quic/moqt/moqt_parser_test.cc b/quiche/quic/moqt/moqt_parser_test.cc
index 278c39f..8116455 100644
--- a/quiche/quic/moqt/moqt_parser_test.cc
+++ b/quiche/quic/moqt/moqt_parser_test.cc
@@ -128,12 +128,10 @@
     subscribe_request.track_namespace = absl::string_view(string0_);
     string1_ = std::string(subscribe_request.track_name);
     subscribe_request.track_name = absl::string_view(string1_);
-#ifdef MOQT_AUTH_INFO
     if (subscribe_request.authorization_info.has_value()) {
       string2_ = std::string(*subscribe_request.authorization_info);
       subscribe_request.authorization_info = absl::string_view(string2_);
     }
-#endif
     last_message_ = TestMessageBase::MessageStructuredData(subscribe_request);
   }
   void OnSubscribeOkMessage(const MoqtSubscribeOk& message) override {
@@ -654,7 +652,6 @@
   EXPECT_EQ(visitor_.parsing_error_code_, MoqtError::kProtocolViolation);
 }
 
-#ifdef MOQT_AUTH_INFO
 TEST_F(MoqtMessageSpecificTest, SubscribeAuthorizationInfoTwice) {
   MoqtParser parser(kWebTrans, visitor_);
   char subscribe[] = {
@@ -675,7 +672,6 @@
             "AUTHORIZATION_INFO parameter appears twice in SUBSCRIBE_REQUEST");
   EXPECT_EQ(visitor_.parsing_error_code_, MoqtError::kProtocolViolation);
 }
-#endif
 
 TEST_F(MoqtMessageSpecificTest, AnnounceAuthorizationInfoTwice) {
   MoqtParser parser(kWebTrans, visitor_);
@@ -768,10 +764,8 @@
       0x01, 0x01,                    // start_object = 1 (absolute)
       0x00,                          // end_group = none
       0x00,                          // end_object = none
-#ifdef MOQT_AUTH_INFO
       0x01,                          // 1 parameter
       0x02, 0x03, 0x62, 0x61, 0x72,  // authorization_info = "bar"
-#endif
   };
   parser.ProcessData(absl::string_view(subscribe, sizeof(subscribe)), false);
   EXPECT_EQ(visitor_.messages_received_, 0);
@@ -790,10 +784,8 @@
       0x00,                          // start_object = none
       0x00,                          // end_group = none
       0x00,                          // end_object = none
-#ifdef MOQT_AUTH_INFO
       0x01,                          // 1 parameter
       0x02, 0x03, 0x62, 0x61, 0x72,  // authorization_info = "bar"
-#endif
   };
   parser.ProcessData(absl::string_view(subscribe, sizeof(subscribe)), false);
   EXPECT_EQ(visitor_.messages_received_, 0);
@@ -812,10 +804,8 @@
       0x01, 0x01,                    // start_object = 1 (absolute)
       0x00,                          // end_group = none
       0x01, 0x01,                    // end_object = 1 (absolute)
-#ifdef MOQT_AUTH_INFO
       0x01,                          // 1 parameter
       0x02, 0x03, 0x62, 0x61, 0x72,  // authorization_info = "bar"
-#endif
   };
   parser.ProcessData(absl::string_view(subscribe, sizeof(subscribe)), false);
   EXPECT_EQ(visitor_.messages_received_, 0);
@@ -871,10 +861,8 @@
       0x03, 0x00,                    // start_object = 1 (relative next)
       0x00,                          // end_group = none
       0x00,                          // end_object = none
-#ifdef MOQT_AUTH_INFO
       0x01,                          // 1 parameter
       0x02, 0x03, 0x62, 0x61, 0x72,  // authorization_info = "bar"
-#endif
   };
   parser.ProcessData(absl::string_view(subscribe, sizeof(subscribe)), false);
   EXPECT_EQ(visitor_.messages_received_, 1);
diff --git a/quiche/quic/moqt/moqt_session_test.cc b/quiche/quic/moqt/moqt_session_test.cc
index a865118..158c7a5 100644
--- a/quiche/quic/moqt/moqt_session_test.cc
+++ b/quiche/quic/moqt/moqt_session_test.cc
@@ -273,9 +273,7 @@
       /*start_object=*/MoqtSubscribeLocation(true, static_cast<uint64_t>(0)),
       /*end_group=*/std::nullopt,
       /*end_object=*/std::nullopt,
-#ifdef MOQT_AUTH_INFO
       /*authorization_info=*/std::nullopt,
-#endif
   };
   StrictMock<webtransport::test::MockStream> mock_stream;
   std::unique_ptr<MoqtParserVisitor> stream_input =
@@ -393,9 +391,7 @@
       /*start_object=*/MoqtSubscribeLocation(true, static_cast<uint64_t>(0)),
       /*end_group=*/std::nullopt,
       /*end_object=*/std::nullopt,
-#ifdef MOQT_AUTH_INFO
       /*authorization_info=*/std::nullopt,
-#endif
   };
   StrictMock<webtransport::test::MockStream> mock_stream;
   std::unique_ptr<MoqtParserVisitor> stream_input =
@@ -431,9 +427,7 @@
       /*start_object=*/MoqtSubscribeLocation(true, static_cast<uint64_t>(0)),
       /*end_group=*/std::nullopt,
       /*end_object=*/std::nullopt,
-#ifdef MOQT_AUTH_INFO
       /*authorization_info=*/std::nullopt,
-#endif
   };
   StrictMock<webtransport::test::MockStream> mock_stream;
   std::unique_ptr<MoqtParserVisitor> stream_input =
@@ -767,9 +761,7 @@
       /*start_object=*/MoqtSubscribeLocation(true, static_cast<uint64_t>(0)),
       /*end_group=*/std::nullopt,
       /*end_object=*/std::nullopt,
-#ifdef MOQT_AUTH_INFO
       /*authorization_info=*/std::nullopt,
-#endif
   };
   StrictMock<webtransport::test::MockStream> mock_stream;
   std::unique_ptr<MoqtParserVisitor> stream_input =
diff --git a/quiche/quic/moqt/test_tools/moqt_test_message.h b/quiche/quic/moqt/test_tools/moqt_test_message.h
index dae15e0..cd3d094 100644
--- a/quiche/quic/moqt/test_tools/moqt_test_message.h
+++ b/quiche/quic/moqt/test_tools/moqt_test_message.h
@@ -407,65 +407,55 @@
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
     auto cast = std::get<MoqtSubscribe>(values);
-    if (cast.subscribe_id != subscribe_request_.subscribe_id) {
+    if (cast.subscribe_id != subscribe_.subscribe_id) {
       QUIC_LOG(INFO) << "SUBSCRIBE subscribe ID mismatch";
       return false;
     }
-    if (cast.track_alias != subscribe_request_.track_alias) {
+    if (cast.track_alias != subscribe_.track_alias) {
       QUIC_LOG(INFO) << "SUBSCRIBE track alias mismatch";
       return false;
     }
-    if (cast.track_namespace != subscribe_request_.track_namespace) {
+    if (cast.track_namespace != subscribe_.track_namespace) {
       QUIC_LOG(INFO) << "SUBSCRIBE track namespace mismatch";
       return false;
     }
-    if (cast.track_name != subscribe_request_.track_name) {
+    if (cast.track_name != subscribe_.track_name) {
       QUIC_LOG(INFO) << "SUBSCRIBE track name mismatch";
       return false;
     }
-    if (cast.start_group != subscribe_request_.start_group) {
+    if (cast.start_group != subscribe_.start_group) {
       QUIC_LOG(INFO) << "SUBSCRIBE start group mismatch";
       return false;
     }
-    if (cast.start_object != subscribe_request_.start_object) {
+    if (cast.start_object != subscribe_.start_object) {
       QUIC_LOG(INFO) << "SUBSCRIBE start object mismatch";
       return false;
     }
-    if (cast.end_group != subscribe_request_.end_group) {
+    if (cast.end_group != subscribe_.end_group) {
       QUIC_LOG(INFO) << "SUBSCRIBE end group mismatch";
       return false;
     }
-    if (cast.end_object != subscribe_request_.end_object) {
+    if (cast.end_object != subscribe_.end_object) {
       QUIC_LOG(INFO) << "SUBSCRIBE end object mismatch";
       return false;
     }
-#ifdef MOQT_AUTH_INFO
-    if (cast.authorization_info != subscribe_request_.authorization_info) {
+    if (cast.authorization_info != subscribe_.authorization_info) {
       QUIC_LOG(INFO) << "SUBSCRIBE authorization info mismatch";
       return false;
     }
-#endif
     return true;
   }
 
   void ExpandVarints() override {
-#ifdef MOQT_AUTH_INFO
     ExpandVarintsImpl("vvvv---v----vvvvvvvvv");
-#else
-    ExpandVarintsImpl("vvvv---v----vvvvvv");
-#endif
   }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(subscribe_request_);
+    return TestMessageBase::MessageStructuredData(subscribe_);
   }
 
  private:
-#ifdef MOQT_AUTH_INFO
   uint8_t raw_packet_[24] = {
-#else
-  uint8_t raw_packet_[18] = {
-#endif
     0x03,
     0x01,
     0x02,  // id and alias
@@ -486,17 +476,15 @@
     0x00,  // end_object = none
            // TODO(martinduke): figure out what to do about the missing num
            // parameters field.
-#ifdef MOQT_AUTH_INFO
     0x01,  // 1 parameter
     0x02,
     0x03,
     0x62,
     0x61,
     0x72,  // authorization_info = "bar"
-#endif
   };
 
-  MoqtSubscribe subscribe_request_ = {
+  MoqtSubscribe subscribe_ = {
       /*subscribe_id=*/1,
       /*track_alias=*/2,
       /*track_namespace=*/"foo",
@@ -505,9 +493,7 @@
       /*start_object=*/MoqtSubscribeLocation(true, (uint64_t)1),
       /*end_group=*/std::nullopt,
       /*end_object=*/std::nullopt,
-#ifdef MOQT_AUTH_INFO
       /*authorization_info=*/"bar",
-#endif
   };
 };
 
