Both. GraphQL is an application layer, but the core failures are access control failures. Resolver checks, field restrictions and mutation guards depend on identity context, privilege boundaries and lifecycle governance, so application and IAM teams need shared accountability.
Why GraphQL Security Sits at the Boundary Between Application Logic and Identity Trust
GraphQL security is easy to misclassify because the query language looks like an application interface, while the harm usually comes from broken trust decisions. A schema can expose fields, mutations, and nested objects correctly and still leak data if the application does not enforce object-level and field-level authorisation using reliable identity context. NIST’s control model is useful here because it separates access enforcement, least privilege, and monitoring into distinct obligations rather than assuming one team owns the whole risk picture. NIST SP 800-53 Rev 5 Security and Privacy Controls In practice, many security teams discover GraphQL weaknesses only after a resolver or mutation has already exposed data that the schema itself appeared to protect.
How the Control Problem Shows Up in Real GraphQL Deployments
GraphQL shifts security decisions away from a small set of endpoints and into resolvers, policy checks, and schema design. That means the real control surface is not just the API gateway or the transport layer, but the logic that decides whether a caller can see a field, traverse a relationship, or invoke a mutation. If those checks are inconsistent, the same identity may receive different access depending on which resolver path it uses, which creates subtle privilege gaps.
In practice, organisations need to think about three layers at once. First, the schema defines what can be asked for. Second, the application decides whether the requested object, field, or action is allowed. Third, IAM supplies the identity attributes, roles, session state, and lifecycle rules that make those decisions trustworthy. If the identity context is stale, overly broad, or poorly mapped to application permissions, GraphQL controls tend to fail in ways that are hard to spot during testing.
- Field-level restrictions matter when one object contains both permissible and sensitive attributes.
- Mutation guards matter when a valid session can still trigger destructive or high-impact actions.
- Resolver checks matter when nested queries can reach data that direct endpoint checks would never expose.
- Privilege lifecycle matters when access granted for one use case quietly remains valid for many others.
This is why GraphQL governance should be designed as shared ownership. Application teams usually understand the schema and resolver behaviour best, while IAM teams understand identity assurance, role design, and revocation. The question is not which side owns GraphQL outright, but which side owns each control decision and how those decisions are verified. NIST SP 800-53 Rev 5 Security and Privacy Controls gives a useful control vocabulary for that split because access enforcement, least privilege, and auditability all have to work together. Where teams treat GraphQL as only an API problem, they often overfocus on schema shape and underinvest in identity-bound authorisation.
The guidance breaks down when the organisation cannot reliably pass identity context into the resolver layer or cannot map business roles to fine-grained permissions with enough precision.
Where the Answer Changes: Delegated Access, Service Identities, and Over-Privileged Mutations
Tighter GraphQL authorisation often increases design and testing overhead, requiring organisations to balance developer convenience against precise access decisions. That tradeoff becomes more visible when GraphQL is used by multiple client types, internal services, or delegated workflows, because the same resolver may need different trust assumptions depending on who or what is calling it.
One common edge case is when a human user, a service account, and an automated workflow all reach the same schema. The application may need to distinguish them even when the transport path looks identical, because their privileges, approval paths, and revocation rules should not be the same. Another edge case is when business logic depends on derived identity attributes such as tenancy, department, or delegation status. In those cases, a simple allow or deny based on role name is often too coarse, and the better question is whether the application can prove the caller is entitled to each object path.
There is also a governance issue where teams assume GraphQL security can be solved centrally at the gateway. That can help with rate limiting, introspection policy, and coarse filtering, but it does not replace per-resolver authorisation. The distinction matters because gateway controls may reduce exposure while still leaving high-risk mutations or object traversals unprotected deeper in the stack.
For that reason, organisations should treat GraphQL as a shared application and IAM problem whenever the API exposes sensitive records, delegated access, or privileged mutations. If a GraphQL deployment has no clear ownership for identity context, permission mapping, and resolver enforcement, the security model is usually weaker than the schema suggests.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 address the attack and risk surface, while CIS Controls v8 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| CIS Controls v8 | 6 — Access Control Management | GraphQL failures are often object and field access control failures. |
| Recommendation — Enforce access reviews and revoke overbroad GraphQL permissions promptly. | ||
| NIST CSF 2.0 | PR.AC-4 — Access Permissions and Authorizations | GraphQL resolvers depend on permissions tied to identity context. |
| PR.AC-1 — Identities and Credentials | Identity assurance underpins trust in GraphQL access decisions. | |
| Recommendation — Apply least-privilege authorisation to every GraphQL resolver and mutation. Validate caller identity before using it for GraphQL policy enforcement. | ||
| OWASP Non-Human Identity Top 10 | NHI-01 — Inventory and Ownership | Service identities and automation often call GraphQL with privileged access. |
| NHI-04 — Secrets and Credential Management | GraphQL service access often relies on tokens, API keys, or certificates. | |
| Recommendation — Inventory every service identity that can reach GraphQL and assign ownership. Protect GraphQL credentials with rotation, revocation, and narrow scope. | ||
Practitioner Guidance
What to prioritise: Treat resolver-level authorisation as the first control to verify, because that is where schema correctness turns into real access decisions. A secure-looking schema is not enough if the enforcement point cannot distinguish object ownership, delegated access, and high-risk mutations.
What to verify: Confirm that identity attributes reaching the application are current, trustworthy, and sufficiently granular for the permission decision being made. If role data, tenancy data, or session state is stale, then the application may be enforcing the wrong policy even when the code appears consistent.
Decision rule: If a GraphQL operation can expose sensitive fields, cross object boundaries, or change business state, it should be treated as a joint application and IAM control. If the team cannot explain who owns schema enforcement, who owns identity assurance, and how those controls are tested together, the implementation is incomplete.
Practitioner takeaway: GraphQL becomes dangerous when teams assume the schema is the control boundary; in practice, the boundary is the combination of identity context, resolver enforcement, and lifecycle governance.
Related resources from NHI Mgmt Group
- What do organisations get wrong when they treat identity security as only an IAM or workforce problem?
- What breaks when organisations treat agent risk as a normal application security problem?
- Should organisations treat DSPM as part of IAM or data security?
- Should organisations treat identity controls as part of application security?