Substantively reviewed September 2026OWASP + NIST + IETF

Secure the decisions behind every API call—not just the endpoint.

A secure API program has to control identity, object and property authorization, sensitive business flows, resource consumption, upstream trust, software supply chain evidence, deployment configuration, inventory, and retirement. This guide turns the current stable standards into an operating model teams can apply from design through production.

The 2026 recertification replaces stale ASVS 4.0.3 and SLSA 1.0-era guidance. It uses OWASP ASVS 5.0.0, OWASP API Security Top 10 2023, NIST SSDF 1.1, SLSA 1.2, and RFC 9700 as the stable baseline. OAuth 2.1 and NIST SSDF 1.2 are tracked as work in progress rather than represented as final standards.

Standards status

Separate production baselines from useful drafts.

OWASP ASVS 5.0.0 is the current stable ASVS release and is useful as a verification-requirements baseline for application security. The OWASP API Security Top 10 2023 is the current API-specific awareness list and is especially useful for threat modeling, test design, and design-review prompts. NIST SP 800-218 remains the final SSDF Version 1.1 baseline for secure software-development practices. SLSA Version 1.2 is approved and organizes supply-chain guarantees into Build and Source tracks with associated levels and attestations.

For OAuth deployments, RFC 9700 is a final IETF Best Current Practice and should anchor production security decisions. It incorporates lessons learned since OAuth 2.0, deprecates weaker modes, requires exact redirect-URI matching in the applicable flows, strengthens authorization-code protections, and recommends sender-constrained tokens where appropriate. OAuth 2.1 remains an IETF working-group Internet-Draft, so use it as directional consolidation of modern OAuth practice rather than as a finalized normative reference.

NIST’s proposed SSDF Version 1.2 is likewise an initial public draft as of this review. Teams can monitor its changes, but contracts, control mappings, and compliance claims should clearly distinguish the final SSDF 1.1 publication from the draft revision. This status discipline matters: a control catalog that silently treats drafts as final becomes hard to defend when draft text changes or expires.

Stable baseline

  • OWASP ASVS 5.0.0.
  • OWASP API Security Top 10 2023.
  • NIST SP 800-218 / SSDF 1.1.
  • SLSA 1.2.
  • RFC 9700 OAuth 2.0 Security BCP.

Watchlist, not final authority

  • OAuth 2.1 working-group Internet-Draft.
  • NIST SP 800-218 Rev. 1 / SSDF 1.2 initial public draft.
Architecture first

Threat-model the business capability, data, and trust boundaries before selecting controls.

Start with an inventory of what the API lets a caller do. Document the caller types, identities, tenant boundaries, objects, sensitive properties, state-changing actions, external dependencies, privileged administration paths, asynchronous jobs, webhooks, and machine-to-machine flows. Then identify which operations would be damaging if a valid user invoked them against the wrong object, too many times, in the wrong sequence, or with data the caller should never be able to set.

This design view prevents a common failure: treating authentication as if it answers authorization. A perfectly validated token proves something about the caller, but it does not prove that the caller may read object 4812, update another tenant’s billing address, approve its own transaction, enumerate restricted fields, or execute an administrative function. Build a decision model that can answer those questions consistently and can be tested independently from route wiring.

Record security assumptions in the API contract and architecture decision records. Include required scopes or claims, ownership rules, property-level restrictions, idempotency expectations, rate or cost controls, allowed content types, maximum request sizes, trust rules for callback destinations, and the behavior of deprecated versions. These are testable requirements, not implementation trivia.

Authentication and tokens

Use modern OAuth security practices without pretending OAuth 2.1 is already an RFC.

Protect authorization flows

For redirect-based authorization, register redirect URIs precisely and compare them using the exact matching rules in RFC 9700. Public clients must use PKCE for authorization-code protection; confidential clients should use PKCE as well unless another documented protection applies. Bind state, nonce where applicable, and PKCE material to the correct browser transaction and reject replay or mismatched responses.

Reduce token replay value

Keep access-token audience and privilege narrow, avoid placing bearer tokens in URLs, and prefer short useful lifetimes supported by reliable renewal. Where the risk justifies it, sender-constrain access tokens using standardized mechanisms such as mutual TLS or DPoP. Treat refresh tokens as high-value credentials with rotation, revocation, theft detection, and lifecycle rules appropriate to the client type.

Make identity configuration discoverable and reviewable

Use standardized authorization-server metadata where available instead of scattering endpoint URLs and cryptographic assumptions through application configuration. Prefer asymmetric client authentication when feasible for confidential clients, protect signing keys and client credentials through managed secret or key services, and make key rotation routine rather than an emergency procedure. Validate issuer, audience, signature, algorithm policy, token time bounds, and application-specific claims at the resource server; do not treat successful JWT parsing as authorization.

OWASP API authorization

Test authorization at the object, property, and function layers.

Broken Object Level Authorization remains the first risk in the OWASP API Security Top 10 2023. The durable test is simple: for every route that receives or derives an object identifier, verify that access is evaluated against the authenticated subject, tenant, purpose, relationship, and requested action—not merely against the existence of the object. Use deny-by-default behavior and centralize reusable policy decisions where that improves consistency.

Property-level authorization deserves separate attention. An API can correctly restrict access to an object while still exposing fields the caller should not see or accepting fields the caller should not be able to modify. Define explicit request and response schemas, bind writable fields to the caller’s role or policy decision, and shape responses rather than serializing internal domain objects wholesale. Negative tests should attempt to read and write privileged, internal, computed, ownership, status, and audit fields.

Function-level authorization protects actions whose consequence is higher than ordinary data access: user administration, bulk export, refunds, approval, role changes, impersonation, configuration, key management, or destructive operations. Do not rely on hidden UI controls or route naming. Enforce authorization on the server for every privileged action and test vertical and horizontal privilege changes directly.

For multi-step workflows, verify sequence and state as part of authorization. A caller should not be able to approve before review, reuse a one-time action, skip payment or verification steps, or invoke a later workflow endpoint by learning its URL. Model allowed state transitions explicitly and reject operations that are valid in isolation but invalid in the current business state.

Resource and business-flow abuse

Control legitimate-looking requests that become harmful at scale.

Bound resource consumption

Define limits for request body size, file size, pagination, query complexity, nested expansion, batch size, concurrency, CPU-heavy operations, downstream fan-out, and expensive third-party calls. Apply rate limits and quotas at a level that reflects identity and business context, return predictable throttling responses, and monitor cost as well as request count. A cheap request at the gateway can trigger expensive work behind it.

Protect sensitive business flows

Identify workflows that attackers can monetize or automate without exploiting a traditional coding flaw: account creation, reservations, coupon redemption, credential recovery, inventory purchase, messaging, scraping, search, or verification. Add friction proportionate to abuse risk using quotas, velocity rules, proof of user presence, transaction limits, anomaly detection, queueing, or manual review rather than assuming authentication makes the flow safe.

Design denial-of-service controls around dependencies

Protect databases, queues, identity providers, payment services, AI inference, document generation, search indexes, and other constrained dependencies with timeouts, circuit breakers, bounded retries, backpressure, and bulkheads. Retries should be safe for the operation and include jitter; state-changing APIs should use idempotency controls where duplicate submission is possible. Test what happens when dependencies are slow, not only when they are fully unavailable.

Input, SSRF, and upstream APIs

Treat data from callers and other APIs as untrusted across every trust boundary.

Validate input against an explicit schema before business processing. Enforce expected content types, types, ranges, lengths, formats, enumeration values, and structural limits. Reject unknown or forbidden fields when the contract permits. Parameterized data access and context-appropriate output encoding remain necessary, but API security also depends on validating semantic rules such as allowed identifiers, ownership transitions, file types, and business constraints.

Server-Side Request Forgery deserves architectural controls when callers can influence URLs, webhooks, import locations, image fetches, proxy destinations, or cloud-resource references. Prefer allowlisted destinations or service identities over generic URL fetch capability. Resolve and validate destinations carefully, restrict egress at the network layer, block access to instance metadata and internal administration ranges, control redirects, and re-check the effective destination after resolution rather than trusting a string prefix.

Unsafe consumption of APIs means upstream responses need the same skepticism as direct user input. Set timeouts and size limits, validate schemas, verify TLS and expected identity, constrain redirects, sanitize data before it reaches interpreters or templates, and avoid automatically trusting an upstream service merely because it belongs to a known vendor. Record which external APIs can influence authorization, pricing, identity, or other high-consequence decisions and define fallback behavior when their responses are missing, stale, malformed, or compromised.

Inventory and lifecycle

Know every externally reachable API version and who is accountable for it.

Improper inventory management is a security problem because forgotten beta versions, alternate hostnames, legacy gateways, undocumented partner routes, test environments, and old mobile backends often miss current controls. Maintain a machine-readable service inventory that maps API name, owner, environment, base URL, version, exposure, authentication method, data classification, dependencies, repository, deployment target, support status, and retirement date.

Make the delivery platform update that inventory automatically where possible. Compare gateway routes, DNS, cloud endpoints, service meshes, API specifications, and observability data against the declared inventory to find drift. An endpoint observed in production but absent from the authoritative inventory should create work; an inventory record with no observed deployment should be investigated or retired.

Versioning needs security rules, not only compatibility rules. Define how long versions remain supported, how security fixes reach older versions, what clients receive deprecation warnings, and the date after which traffic is rejected. Do not leave a vulnerable legacy version online indefinitely because one unknown client might still use it. Provide measurable migration telemetry and an escalation path for owners who miss retirement dates.

Secure delivery and provenance

Make the released API traceable to reviewed source and controlled build inputs.

NIST SSDF 1.1 provides the stable secure-development baseline for integrating security practices across the software lifecycle. Apply it to API code, infrastructure definitions, gateway policies, schemas, generated clients, migration logic, and deployment automation—not just the primary application repository. The release record should connect requirements and threat decisions to source revision, review, tests, dependency state, build identity, artifact digest, approval, and deployment result.

SLSA 1.2 provides current supply-chain language for improving guarantees in the Build and Source tracks. Use provenance to answer where an artifact came from and which build process produced it; use source-control protections and review evidence to strengthen confidence in the inputs. Select an appropriate SLSA level based on risk rather than marketing a generic “SLSA compliant” label that does not state the track, level, scope, or evidence.

Produce dependency and component evidence in formats your organization can actually retain and query. An SBOM can support investigation and vulnerability response, but it does not prove an artifact is secure and it should not replace source review, build provenance, vulnerability handling, or deployment verification. Preserve exact artifact identifiers so a later incident can determine which services were built from an affected component and which production deployments actually contain it.

Release gates should fail closed for high-consequence control failures and use explicit, expiring exceptions for anything intentionally waived. Every exception should identify scope, rationale, compensating control, risk owner, approver, expiry, and closure condition. Repeated exceptions are signal: they may indicate a control that is badly placed, a dependency that needs replacement, or a delivery architecture that cannot meet the intended security requirement.

Production operations

Instrument enough context to detect abuse and reconstruct consequential API activity.

Log authentication outcomes, authorization denials, privileged actions, object-access patterns, administrative changes, throttling, validation failures, dependency errors, and security-policy decisions at a level appropriate to the service. Include stable request or trace identifiers, actor and client identity where lawful, target object or resource context, result, and trustworthy time. Avoid logging bearer tokens, secrets, raw credentials, or sensitive payload fields simply because they are convenient for debugging.

Build alerts around behavior and consequence rather than raw status-code volume. Useful signals include sudden cross-tenant authorization denials, enumeration patterns, bursts against sensitive business flows, repeated token replay indicators, unusual export volume, spikes in expensive operations, requests to prohibited egress destinations, use of deprecated API versions, and administrative actions from unusual identities or networks. Tie each alert to an owner and an investigation path.

Prepare API-specific incident actions before an event: revoke a client, rotate credentials and signing keys, block an abused route, reduce quota, disable a feature, isolate a dependency, invalidate sessions, restore a previous release, or retire a compromised integration. Exercise those actions in a non-production environment and confirm that responders can identify affected API versions and deployed artifacts from retained evidence.

Release decision

Use a compact evidence gate before exposing a new API or material change.

Design and implementation

  • Threat model and data classification reviewed.
  • Authentication and token validation defined.
  • Object, property, function, and workflow authorization tested negatively.
  • Request/response schemas and size limits enforced.
  • Sensitive business flows have abuse controls.
  • SSRF and upstream API trust boundaries reviewed.

Delivery and operations

  • Dependencies and build provenance retained.
  • Artifact digest tied to the release decision.
  • Secrets and credentials managed outside source.
  • Runtime configuration and gateway policy verified.
  • Logs and alerts cover consequential actions.
  • Owner, version, support status, rollback, and retirement path recorded.

Do not turn the checklist into a percentage that allows critical failures to average out. A known cross-tenant authorization flaw, uncontrolled administrative function, unresolved credential exposure, or inability to identify what artifact will be deployed should be treated as a release decision requiring correction or explicit risk authority—not as a few lost points on an otherwise green score.

A 30-day API security reset

  1. Week 1

    Reconcile the production API inventory against gateways, DNS, service discovery, cloud endpoints, and observed traffic. Identify unknown versions, owners, and exposures first.

  2. Week 2

    Select the highest-consequence APIs and test object, property, function, and workflow authorization using negative cases across roles and tenants. Fix systemic policy gaps rather than only individual routes.

  3. Week 3

    Add resource-consumption, sensitive-business-flow, SSRF, upstream-response, and dependency-failure tests. Confirm rate, size, timeout, retry, egress, and idempotency controls behave under stress.

  4. Week 4

    Reconstruct one real production release from source through artifact and deployment. Close evidence gaps, verify runtime telemetry, and assign retirement dates to unsupported API versions.

Continue learning

Related guides after Secure API Development

Follow the next implementation topic without returning to search.

Put this guide to work

Turn Secure API Development Guide: OWASP, OAuth & Supply Chain | Zeph Tech into a decision-ready next step.

Use the source-backed research to pressure-test assumptions, then build a reusable evaluation brief before you compare products, scope implementation, or request a fit review.