diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
index 71e3a01..701ba8a 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
@@ -16,6 +16,7 @@
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Response;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -126,6 +127,18 @@
   }
 
   @Override
+  public void sendSecurityRequirementTraversals(
+      ImmutableList<SecurityRequirement> securityRequirementList) {
+    Optional.ofNullable(securityRequirementList)
+        .ifPresent(
+            securityRequirements ->
+                securityRequirements.forEach(
+                    securityRequirement ->
+                        coordinator.handleTraversalCommand(
+                            factory.create(securityRequirement, traversalPath))));
+  }
+
+  @Override
   public void sendServerTraversals(ImmutableList<Server> serversList) {
     Optional.ofNullable(serversList)
         .ifPresent(
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
index 6fd6f9f..22ed41d 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
@@ -41,6 +41,7 @@
         Immutables.toImmutableList(openApiSchemaObj.getParameters()));
     traversalHelper.sendResponseTraversals(
         Immutables.toImmutableMap(openApiSchemaObj.getResponses()));
-    // TODO(b/163024265): Send Security Requirement Traversals.
+    traversalHelper.sendSecurityRequirementTraversals(
+        Immutables.toImmutableList(openApiSchemaObj.getSecurityRequirements()));
   }
 }
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversal.java
new file mode 100644
index 0000000..78f614e
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversal.java
@@ -0,0 +1,28 @@
+package com.apigee.security.oas.extendedvalidator;
+
+import com.google.common.collect.ImmutableList;
+import com.google.inject.assistedinject.Assisted;
+import java.util.Map;
+import java.util.Optional;
+import javax.inject.Inject;
+import org.openapi4j.parser.model.OpenApiSchema;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
+
+/** A {@link Traversal} that traverses a {@link SecurityRequirement} object. */
+final class SecurityRequirementTraversal extends Traversal<SecurityRequirement>
+    implements SecurityRequirementTraversalCommand {
+  @Inject
+  SecurityRequirementTraversal(
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionValidationIntegrator extensionValidationIntegrator,
+      @Assisted
+          ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      @Assisted SecurityRequirement openApiSchemaObj) {
+    super(traversalHelperFactory, extensionValidationIntegrator, traversalPath, openApiSchemaObj);
+  }
+
+  @Override
+  public void traverse() {
+    // TODO(b/161441872): Process extensions.
+  }
+}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversalCommand.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversalCommand.java
new file mode 100644
index 0000000..508850b
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/SecurityRequirementTraversalCommand.java
@@ -0,0 +1,4 @@
+package com.apigee.security.oas.extendedvalidator;
+
+/** A {@link TraversalCommand} interface for {@link SecurityRequirementTraversal}. */
+public interface SecurityRequirementTraversalCommand extends TraversalCommand {}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
index 5d7f241..2167c17 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
@@ -13,6 +13,7 @@
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Response;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -60,6 +61,10 @@
       ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
       String name);
 
+  SecurityRequirementTraversalCommand create(
+      SecurityRequirement securityRequirement,
+      ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath);
+
   ServerTraversalCommand create(
       Server server,
       ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath);
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
index dfc7cb9..fb3d8a7 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
@@ -19,6 +19,8 @@
             .implement(OperationTraversalCommand.class, OperationTraversal.class)
             .implement(ParameterTraversalCommand.class, ParameterTraversal.class)
             .implement(ResponseTraversalCommand.class, ResponseTraversal.class)
+            .implement(
+                SecurityRequirementTraversalCommand.class, SecurityRequirementTraversal.class)
             .implement(ServerTraversalCommand.class, ServerTraversal.class)
             .implement(ServerVariableTraversalCommand.class, ServerVariableTraversal.class)
             .implement(TagTraversalCommand.class, TagTraversal.class)
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
index 776c07d..c2c6c94 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
@@ -11,6 +11,7 @@
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Response;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -36,6 +37,8 @@
 
   void sendResponseTraversals(ImmutableMap<String, Response> responses);
 
+  void sendSecurityRequirementTraversals(ImmutableList<SecurityRequirement> securityRequirements);
+
   void sendServerTraversals(ImmutableList<Server> serversList);
 
   void sendServerVariableTraversals(ImmutableMap<String, ServerVariable> serverVariables);
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
index 4a5e6c5..397f545 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
@@ -24,6 +24,7 @@
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -39,6 +40,9 @@
 
   private final ImmutableList<Parameter> parameters =
       ImmutableList.of(new Parameter(), new Parameter(), new Parameter(), new Parameter());
+  private final ImmutableList<SecurityRequirement> securityRequirements =
+      ImmutableList.of(
+          new SecurityRequirement(), new SecurityRequirement(), new SecurityRequirement());
   private final ImmutableList<Server> servers =
       ImmutableList.of(new Server(), new Server(), new Server());
   private final ImmutableList<Tag> tags =
@@ -89,7 +93,7 @@
   }
 
   @Test
-  public void sendContactTraversals_nullParameter_doesNotFail() {
+  public void sendContactTraversal_nullParameter_doesNotFail() {
     traversalHelper.sendContactTraversal(null);
   }
 
@@ -169,6 +173,20 @@
   }
 
   @Test
+  public void
+      sendSecurityRequirementTraversals_sendsSecurityRequirementTraversalCommandsToCoordinator() {
+    traversalHelper.sendSecurityRequirementTraversals(securityRequirements);
+
+    verify(traversalCoordinator, times(securityRequirements.size()))
+        .handleTraversalCommand(any(SecurityRequirementTraversalCommand.class));
+  }
+
+  @Test
+  public void sendSecurityRequirementTraversals_nullParameter_doesNotFail() {
+    traversalHelper.sendSecurityRequirementTraversals(null);
+  }
+
+  @Test
   public void sendServerTraversals_sendsServerTraversalCommandsToCoordinator() {
     traversalHelper.sendServerTraversals(servers);
 
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
index 6a5c9af..5e4436e 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
@@ -21,6 +21,7 @@
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Response;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 
 @RunWith(JUnit4.class)
@@ -35,6 +36,9 @@
 
   private final ExternalDocs externalDocs = new ExternalDocs();
 
+  private final ImmutableList securityRequirements =
+      ImmutableList.of(
+          new SecurityRequirement(), new SecurityRequirement(), new SecurityRequirement());
   private final ImmutableList servers = ImmutableList.of(new Server(), new Server(), new Server());
 
   private final ImmutableList parameters =
@@ -55,6 +59,7 @@
     when(operation.getParameters()).thenReturn(parameters);
     when(operation.getResponses()).thenReturn(responses);
     when(operation.getCallbacks()).thenReturn(callbacks);
+    when(operation.getSecurityRequirements()).thenReturn(securityRequirements);
 
     operationTraversal =
         new OperationTraversal(
@@ -68,6 +73,22 @@
   }
 
   @Test
+  public void traverse_sendsCallbacksToTraversalHelper() {
+    operationTraversal.traverse();
+
+    verify(traversalHelper).sendCallbackTraversals(callbacks);
+  }
+
+  @Test
+  public void traverse_nullCallbacksMember_doesNotFail() {
+    when(operation.getCallbacks()).thenReturn(null);
+
+    operationTraversal.traverse();
+
+    verify(traversalHelper, atLeastOnce()).sendCallbackTraversals(any());
+  }
+
+  @Test
   public void traverse_sendsExternalDocsToTraversalHelper() {
     operationTraversal.traverse();
 
@@ -107,6 +128,22 @@
   }
 
   @Test
+  public void traverse_sendsSecurityRequirementsToTraversalHelper() {
+    operationTraversal.traverse();
+
+    verify(traversalHelper).sendSecurityRequirementTraversals(securityRequirements);
+  }
+
+  @Test
+  public void traverse_nullSecurityRequirementsMember_doesNotFail() {
+    when(operation.getSecurityRequirements()).thenReturn(null);
+
+    operationTraversal.traverse();
+
+    verify(traversalHelper, atLeastOnce()).sendSecurityRequirementTraversals(any());
+  }
+
+  @Test
   public void traverse_sendsServersToTraversalHelper() {
     operationTraversal.traverse();
 
@@ -121,20 +158,4 @@
 
     verify(traversalHelper, atLeastOnce()).sendServerTraversals(any());
   }
-
-  @Test
-  public void traverse_sendsCallbacksToTraversalHelper() {
-    operationTraversal.traverse();
-
-    verify(traversalHelper).sendCallbackTraversals(callbacks);
-  }
-
-  @Test
-  public void traverse_nullCallbacksMember_doesNotFail() {
-    when(operation.getCallbacks()).thenReturn(null);
-
-    operationTraversal.traverse();
-
-    verify(traversalHelper, atLeastOnce()).sendCallbackTraversals(any());
-  }
 }
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
index 3a31349..9f8e177 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
@@ -20,6 +20,7 @@
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Response;
+import org.openapi4j.parser.model.v3.SecurityRequirement;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -79,6 +80,12 @@
   }
 
   @Test
+  public void create_securityRequirementPassed_returnsNonNullObject() {
+    assertThat(traversalCommandFactory.create(new SecurityRequirement(), traversalPath))
+        .isNotNull();
+  }
+
+  @Test
   public void create_serverPassed_returnsNonNullObject() {
     assertThat(traversalCommandFactory.create(new Server(), traversalPath)).isNotNull();
   }
