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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Reconcile the production API inventory against gateways, DNS, service discovery, cloud endpoints, and observed traffic. Identify unknown versions, owners, and exposures first.
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.
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.
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.
The guide is an implementation aid, not a claim that any specific API or organization conforms to a standard or legal requirement. Apply contractual, regulatory, sector, and risk requirements to the actual system scope.
Follow the next implementation topic without returning to search.
Govern identity lifecycle, authentication, federation, privileged access, service identities, access review, and identity evidence
Continue readingDesign useful security logging, resilient collection, detection engineering, investigation context, retention, and evidence
Continue readingBuild verifiable software supply-chain controls
Continue readingUse 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.