Skip to main content

Standards status

Each row below is one requirement of one standard. It gives the status, what the code does, the source file it rests on, and the integration test or the dated run that shows it. A row with no code path, or with neither a test nor a run, fails the docs check.

The status means only what the row says. Implemented means the code does what the row says, the docs check finds the code and the tests the row cites, and those tests passed in our run on 2026-10-13. A test marked may skip can skip when its setup is missing, such as a sign-in through the mock identity provider, and a skip is not a pass. Partial means part of the requirement works and the row says which part does not. Not implemented means the code does not do it. Refused by design means the server refuses it on purpose. No row says the product conforms to a whole standard.

Paths under Code start at src/main/java/com/identos/pbac/ unless they name another directory. Tests under Evidence are in integration-tests/ and run against an instance with ./pbac test <instance> -- <file> -k <name>.

MCP authorization​

The rows under MCP authorization follow revision 2026-07-28 of the MCP specification. In that revision, dynamic client registration is deprecated and kept for clients that cannot use a client ID metadata document. The PolicyArc MCP server is the managed gateway at /gateway/mcp. The authorization server issues its tokens.

These rows cover the requirements that fall on an authorization server or an MCP server. Requirements on MCP clients, such as sending the resource parameter, are the client's to meet. Rows under the other standards cover the MCP requirements that point to them, such as refresh token rotation, exact redirect URIs and code_challenge_methods_supported.

Five server requirements of the revision have no row. All authorization server endpoints must be served over HTTPS, which the deployment's TLS setup decides. Servers must account for scope hierarchies. An MCP proxy that uses a static client ID must get the user's consent for each dynamically registered client before it forwards to a third-party authorization server. No test or run here covers those three. Clients and servers must store tokens securely, as OAuth 2.1 section 7.1 describes. The server keeps each access and refresh token in its database as issued, not as a hash, and we saw an issued access token in the access_token table on 2026-10-13. An authorization server must check that a client ID metadata document is valid JSON with the required fields. The server checks only client_id and redirect_uris.

Not listed​

A standard appears here only when the repo has a test or a run for it. JWT access tokens (RFC 9068) are not listed, because access tokens are opaque. Pushed authorization requests (RFC 9126) are not listed, because the server has no such endpoint.

OAuth 2.1 (draft-ietf-oauth-v2-1-13)​

RequirementStatusWhat the code doesCodeEvidence
Implicit grant (response_type=token)Refused by designNot offered. /authorize answers 400 invalid_request with "response_type must be 'code'". Discovery lists only code.oauth/service/AuthorizeService.java
  • integration-tests/test_oauth21.py::test_implicit_grant_not_supported
  • Run on 2026-10-13. GET /authorize?response_type=token returned 400 invalid_request on a fresh instance
Resource owner password grantRefused by designNot offered. /token answers unsupported_grant_type for grant_type=password.oauth/controller/TokenController.java
  • integration-tests/test_oauth21.py::test_password_grant_not_supported
  • Run on 2026-10-13. POST /token grant_type=password returned unsupported_grant_type on a fresh instance
Exact redirect URI matchingImplementedA redirect_uri must match a registered value. A prefix of a registered URI is refused. A loopback URI matches on any port.oauth/util/RedirectUriValidator.java
  • integration-tests/test_oauth21.py::test_prefix_redirect_uri_rejected
  • integration-tests/test_oauth21.py::test_loopback_literal_on_another_port_still_matches
Authorization codes are single useImplementedA second redemption of a code returns invalid_grant, with "Invalid or expired authorization code" when it comes after the first, and "Authorization code already used" when two redemptions race.oauth/grant/AuthorizationCodeGrantHandler.javaoauth/grant/AuthorizationCodeGrantHandler.java
  • integration-tests/test_oauth21.py::test_authorization_code_reuse_rejected (may skip)
client_credentials only for confidential clientsImplementedA public client that asks for client_credentials is refused.oauth/grant/ClientCredentialsGrantHandler.java
  • integration-tests/test_oauth21.py::test_public_client_cannot_use_client_credentials
Refresh token rotation for public clients (section 4.3.1)PartialRotates for public clients without DPoP. The old token is deleted, so a replay is refused but does not revoke the new token. A public client whose tokens are DPoP-bound is not rotated.oauth/service/TokenService.javaoauth/service/TokenService.javaoauth/grant/RefreshTokenGrantHandler.java
  • integration-tests/test_rfc6749.py::test_refresh_token_rotation_for_public_client
  • integration-tests/test_rfc6749.py::test_rotated_refresh_token_invalidates_old

RFC 7636 PKCE​

RequirementStatusWhat the code doesCodeEvidence
S256 code challengeImplementedS256 is the only method discovery advertises. A wrong code_verifier is refused.oauth/controller/WellKnownController.java
  • integration-tests/test_oauth21.py::test_wrong_code_verifier_rejected (may skip)
plain code challenge methodRefused by design/authorize answers 400 invalid_request, "PKCE code_challenge_method 'plain' is not allowed; use S256". /token refuses a code that carries plain.oauth/service/AuthorizeService.javaoauth/grant/AuthorizationCodeGrantHandler.java
  • integration-tests/test_authorize.py::test_authorize_pkce_plain_rejected
  • Run on 2026-10-13. GET /authorize with code_challenge_method=plain returned 400 invalid_request on a fresh instance
Code challenge required for public clientsImplementedA public client with no code_challenge is sent back to its redirect URI with error=invalid_request. The pkce control can widen this to every client or a named list.oauth/service/AuthorizeService.javasrc/main/resources/controls/pkce.control.v1.json
  • integration-tests/test_oauth21.py::test_auth_code_without_pkce_rejected_for_public_client
  • Run on 2026-10-13. GET /authorize for a public client with no code_challenge redirected with error=invalid_request

OpenID Connect Core 1.0​

RequirementStatusWhat the code doesCodeEvidence
ID token claims iss, sub, aud, exp, iatImplementedIssued from the authorization code flow when openid is granted, signed RS256, with the client in aud.oauth/service/IdTokenService.java
  • integration-tests/test_oidc_core.py::test_id_token_has_required_claims (may skip)
  • integration-tests/test_oidc_core.py::test_request_without_openid_scope_has_no_id_token (may skip)
  • integration-tests/test_oidc_core.py::test_id_token_is_signed (may skip)
nonce and auth_time in the ID tokenImplementedA nonce from the request is copied into the ID token. max_age adds auth_time.oauth/service/IdTokenService.java
  • integration-tests/test_oidc_core.py::test_nonce_echoed_in_id_token (may skip)
  • integration-tests/test_oidc_core.py::test_max_age_causes_auth_time_in_id_token (may skip)
UserInfo endpointImplementedGET /userinfo with a bearer token returns sub, which matches the ID token's sub. An invalid token gets 401. The controller also maps POST. test_userinfo_uses_get_or_post calls GET only, so no test here calls POST.oauth/controller/UserInfoController.javaoauth/controller/UserInfoController.java
  • integration-tests/test_oidc_core.py::test_userinfo_sub_matches_id_token_sub (may skip)
  • integration-tests/test_oidc_core.py::test_userinfo_invalid_token_rejected
  • integration-tests/test_oidc_core.py::test_userinfo_uses_get_or_post (may skip)
Pairwise subject identifiersNot implementedDiscovery lists only the public subject type. The test asserts only that subject_types_supported is a list. The run saw ["public"].oauth/controller/WellKnownController.java
  • integration-tests/test_oidc_core.py::test_oidc_discovery_has_subject_types_supported (may skip)
  • Run on 2026-10-13. GET /.well-known/openid-configuration on a fresh instance returned subject_types_supported ["public"]

OpenID Connect Discovery 1.0 and RFC 8414​

RequirementStatusWhat the code doesCodeEvidence
Authorization server metadataImplementedServed at /.well-known/openid-configuration and /.well-known/oauth-authorization-server, with code_challenge_methods_supported and registration_endpoint.oauth/controller/WellKnownController.java
  • integration-tests/test_managed_gateway_discovery.py::test_metadata_points_to_authorization_server_metadata
  • integration-tests/test_oidc_core.py::test_oidc_discovery_has_issuer (may skip)
  • integration-tests/test_mcp_auth_spec.py::test_discovery_has_code_challenge_methods

RFC 7591 Dynamic Client Registration​

RequirementStatusWhat the code doesCodeEvidence
Registration without a software statementImplementedPOST /register accepts public and confidential clients. The public_client_policy control limits the grant types, and turning it off refuses plain registration.oauth/controller/RegisterController.java
  • integration-tests/test_plain_dcr.py::test_plain_dcr_public_client_succeeds
  • integration-tests/test_plain_dcr.py::test_plain_dcr_rejected_when_disabled
  • integration-tests/test_plain_dcr.py::test_plain_dcr_confidential_client_succeeds
  • integration-tests/test_plain_dcr.py::test_plain_dcr_all_invalid_grant_types_rejected
Software statement signatureImplementedWith PBAC_SOFTWARE_STATEMENT_VERIFY at its default of true, a statement whose payload was changed after signing, or one with no signature, is refused with invalid_software_statement.src/main/resources/application.yml
  • integration-tests/test_software_statement_verification.py::test_tampered_payload_is_rejected
  • Run on 2026-10-13. POST /register with an alg none statement returned 400 invalid_software_statement

RFC 7523 JWT client authentication​

RequirementStatusWhat the code doesCodeEvidence
private_key_jwt client authenticationImplementedA client registered with private_key_jwt authenticates at /token and /introspect with a signed client_assertion.oauth/service/ClientAssertionValidator.java
  • integration-tests/test_private_key_jwt.py::test_token_with_client_assertion (may skip)
  • integration-tests/test_private_key_jwt.py::test_introspect_with_client_assertion (may skip)

RFC 7009 Token Revocation​

RequirementStatusWhat the code doesCodeEvidence
Token revocationPartialPOST /revoke makes the caller's own token inactive. On 0.65.0, revoking another client's token returns 200 and the token stays active. RFC 7009 section 2.1 says "If this validation fails, the request is refused and the client is informed of the error by the authorization server as described below."oauth/controller/RevocationController.java
  • integration-tests/test_revocation.py::test_revoke_makes_token_inactive
  • integration-tests/test_audit_round2.py::test_revoking_another_clients_token_leaves_it_active

RFC 7662 Token Introspection​

RequirementStatusWhat the code doesCodeEvidence
Token introspectionImplementedPOST /introspect needs a caller with a bearer token that carries the right scope, or Basic auth. An unknown token returns active false. The caller can add resource context, and policy is evaluated again with it.oauth/controller/IntrospectController.java
  • integration-tests/test_introspect.py::test_introspect_noAuth_returns401
  • integration-tests/test_introspect.py::test_introspect_unknownToken_returnsActiveFalse
  • integration-tests/test_introspect.py::test_introspect_contextScopesExceedingToken_denied
  • integration-tests/test_introspect.py::test_introspect_basicAuth_rsClient_returnsActiveTrue

RFC 8693 Token Exchange​

RequirementStatusWhat the code doesCodeEvidence
Token exchange with access and ID tokensImplementedAccepts an access token or an ID token from a trusted issuer as the subject token. The response has no refresh token. The subject token stays valid.oauth/grant/TokenExchangeGrantHandler.java
  • integration-tests/test_rfc8693_token_exchange.py::test_exchange_access_token_returns_required_fields
  • integration-tests/test_rfc8693_token_exchange.py::test_id_token_exchange_happy_path
  • integration-tests/test_rfc8693_token_exchange.py::test_exchange_preserves_subject_token_validity
  • integration-tests/test_rfc8693_token_exchange.py::test_exchange_response_no_refresh_token
  • integration-tests/test_rfc8693_token_exchange.py::test_id_token_exchange_untrusted_issuer
Actor tokens and the act claimImplementedAn actor_token adds an act claim whose sub is the actor token's subject, or its client when it has none, shown at introspection. A chained exchange nests act claims. Without an actor_token there is no act claim.oauth/controller/TokenController.javaoauth/grant/TokenExchangeGrantHandler.java
  • integration-tests/test_rfc8693_token_exchange.py::test_delegation_act_claim_has_actor_sub
  • integration-tests/test_rfc8693_token_exchange.py::test_chained_delegation_nests_act_claims
Exchanged token never wider than the subject tokenPartialOn 0.65.0 the token rules compare a request with the subject token only for a resource the exchange did not derive itself (token.rego skips a resource marked derived). When the subject token names a resource, the exchange inherits it as an explicit resource, and that resource is compared. Otherwise the server derives the resource from the requested scope and marks it derived. In our run a client_credentials token for mcp:tools, requested with or without resource_types=urn:mcp:server, was exchanged for mcp:resources and for introspection, and a token for introspection requested with resource_types=urn:as:introspect was exchanged for mcp:tools. A token for introspection requested without resource_types names the resource urn:as:introspect, and its exchange for mcp:tools was refused with access_denied, reason token_exchange_actions_exceeded. The integration test asserts only a 400 with an error. The rego test asserts the reason.opa/policies/oauth/token.regoopa/policies/oauth/token.regooauth/grant/TokenExchangeGrantHandler.javasrc/main/resources/controls/token_derivation.control.v1.json
  • integration-tests/test_rfc8693_token_exchange.py::test_exchange_requestedScopeExceedsSubject_denied
  • opa/policies/oauth/token_test.rego::test_reason_token_exchange_actions_exceeded
  • Run on 2026-10-14. POST /token grant_type=urn:ietf:params:oauth:grant-type:token-exchange, subject tokens from one client_credentials client entitled to mcp:tools, mcp:resources and introspection. mcp:tools (resource_types=urn:mcp:server or none) to mcp:resources: 200. introspection (resource_types=urn:as:introspect) to mcp:tools: 200. introspection (no resource_types) to mcp:tools: 400 access_denied, audit reason token_exchange_actions_exceeded. mcp:tools (either) to introspection: 200.

RFC 8707 Resource Indicators​

RequirementStatusWhat the code doesCodeEvidence
resource parameter (section 2)ImplementedAccepted at /authorize and /token. A resource with a fragment is refused with invalid_request. An unknown resource is refused.oauth/controller/TokenController.java
  • integration-tests/test_rfc8707_resource_indicators.py::test_resource_with_fragment_rejected
  • integration-tests/test_rfc8707_resource_indicators.py::test_token_for_unknown_resource_returns_error
  • integration-tests/test_rfc8707_resource_indicators.py::test_authorize_with_resource_redirects_with_code

RFC 9396 Rich Authorization Requests​

RequirementStatusWhat the code doesCodeEvidence
authorization_detailsImplementedAccepted at /authorize and /token, returned in the token response, and advertised in authorization_details_types_supported. A type the policy data does not list is refused. The introspection test checks the field's shape only when it is present, so it does not show that introspection returns it.oauth/OAuthError.java
  • integration-tests/test_rfc9396_rar.py::test_token_response_includes_authorization_details
  • integration-tests/test_rfc9396_rar.py::test_introspection_includes_authorization_details
  • integration-tests/test_rfc9396_rar.py::test_unknown_authorization_details_type_rejected
  • integration-tests/test_rfc9396_rar.py::test_discovery_includes_authorization_details_types_supported (may skip)
  • integration-tests/test_rar.py::test_rar_authorize_full_flow_code_then_token (may skip)

RFC 9449 DPoP​

RequirementStatusWhat the code doesCodeEvidence
DPoP-bound access tokensImplementedA valid proof at /token yields token_type DPoP and cnf.jkt at introspection. A replayed proof jti is refused.oauth/service/DPopProofValidator.java
  • integration-tests/test_dpop.py::test_introspect_dpop_token_returns_cnf
  • integration-tests/test_dpop.py::test_replayed_jti_rejected
  • integration-tests/test_dpop.py::test_token_with_dpop_proof_returns_dpop_type
DPoP proof at the resource (section 4.3, check 12, and 7)ImplementedThe managed gateway refuses a DPoP-bound token sent without a proof or with a proof from another key.gateway/service/GatewayFlowService.java
  • integration-tests/test_dpop_gateway.py::test_dpop_bound_token_missing_proof_header_rejected
  • integration-tests/test_dpop_gateway.py::test_dpop_bound_token_wrong_proof_key_rejected

RFC 9728 Protected Resource Metadata​

RequirementStatusWhat the code doesCodeEvidence
Protected resource metadataImplementedGET /.well-known/oauth-protected-resource names the resource <issuer>/gateway/mcp, the authorization server and scopes_supported. A gateway request with no token gets 401 and a WWW-Authenticate header with resource_metadata.gateway/controller/GatewayDiscoveryController.javagateway/service/GatewayChallengeRenderer.java
  • integration-tests/test_managed_gateway_discovery.py::test_protected_resource_metadata_endpoint
  • integration-tests/test_managed_gateway_discovery.py::test_mcp_without_token_returns_401_with_resource_metadata

RFC 9207 Authorization Server Issuer Identification​

RequirementStatusWhat the code doesCodeEvidence
iss parameter in authorization responsesNot implementedThe success redirect carries code and state only, and error redirects carry no iss. Discovery has no authorization_response_iss_parameter_supported.oauth/service/OAuth2CallbackService.java
  • Run on 2026-10-13. GET /authorize that failed a check returned a redirect carrying error, error_description and state only. GET /.well-known/openid-configuration had no authorization_response_iss_parameter_supported.

OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-00)​

RequirementStatusWhat the code doesCodeEvidence
URL client IDsImplementedAn HTTPS client_id with a path is fetched at /authorize. The document's client_id must equal the URL and the redirect_uri must be listed in it. Discovery sets client_id_metadata_document_supported.oauth/service/ClientIdMetadataService.java
  • integration-tests/test_cimd.py::test_cimd_client_id_mismatch_rejected
  • integration-tests/test_cimd.py::test_cimd_redirect_uri_mismatch_rejected
  • integration-tests/test_cimd.py::test_cimd_requires_path_component
  • integration-tests/test_cimd.py::test_cimd_discovery_supported
Fetch guardImplementedAn HTTPS client_id is fetched through the AS's guarded fetcher. A client_id that points at a link-local or private address is refused at once, without a connection.oauth/service/ClientIdMetadataService.java
  • integration-tests/test_audit_round2.py::test_cimd_client_id_pointing_inside_is_refused_quickly

MCP authorization, revision 2026-07-28​

RequirementStatusWhat the code doesCodeEvidence
MCP server publishes protected resource metadata (MUST)ImplementedThe gateway at /gateway/mcp is the MCP server. See the RFC 9728 row.gateway/controller/GatewayDiscoveryController.java
  • integration-tests/test_managed_gateway_discovery.py::test_unauthenticated_initialize_returns_401_with_www_authenticate
Client ID metadata documents (SHOULD) and dynamic registration (MAY, deprecated in this revision)ImplementedBoth obtain a token. Neither test calls the gateway.oauth/controller/WellKnownController.java
  • integration-tests/test_mcp_auth_spec.py::test_cimd_full_mcp_flow (may skip)
  • integration-tests/test_mcp_auth_spec.py::test_plain_dcr_full_mcp_flow
Accept only tokens issued for this resource (MUST)PartialA token anchored by resource indicator to one managed resource is refused on a sibling. A type-wide token works on every managed resource of its type. A token of another type is accepted when its scope names match the scopes the call needs. In our 0.65.0 run a token for urn:example:x with scope orders:read read an order through a resource of type urn:example:orders. A token granted only openid cannot call an MCP tool.gateway/service/GatewayFlowService.java
  • integration-tests/test_explicit_client_grants.py::test_a_token_anchored_to_endpoint_a_is_refused_on_endpoint_b
  • integration-tests/test_explicit_client_grants.py::test_an_openid_token_cannot_call_an_mcp_tool
No token passthrough to upstream APIs (MUST NOT)ImplementedThe client's Authorization header is not forwarded to the upstream. The upstream gets the credential its managed resource configures.gateway/service/GatewayProxyService.java
  • integration-tests/test_managed_gateway_upstream.py::test_client_authorization_not_forwarded_to_upstream
Invalid or expired token gets HTTP 401 (MUST)ImplementedA gateway call with a token the server does not know gets 401 with WWW-Authenticate: Bearer, resource_metadata and error="invalid_token".gateway/service/GatewayFlowService.java
  • integration-tests/test_managed_gateway_auth.py::test_garbage_bearer_token_returns_401_with_www_authenticate
Redirect URIs are localhost or HTTPS (MUST)ImplementedRegistration refuses an http redirect URI on a public host with invalid_redirect_uri. At /authorize, a redirect_uri on a public host name that resolves to 127.0.0.1 is refused with 400, not treated as loopback.oauth/service/RegisterService.javaoauth/service/AuthorizeService.java
  • integration-tests/test_oauth21.py::test_hostname_resolving_to_loopback_is_not_redirected_to
  • Run on 2026-10-13. POST /register with redirect_uris [http://app.example.com/cb] returned invalid_redirect_uri
Precautions against redirecting to untrusted URIs (MUST, OAuth 2.1 section 7.12.2)PartialA redirect_uri must match a registered one exactly, so the server never redirects to an unregistered URI. A request with a registered URI that fails a check, such as a public client with no PKCE challenge, is redirected back with an error before anyone signs in. The server does not judge whether a registered URI can be trusted.oauth/util/RedirectUriValidator.javaoauth/service/AuthorizeService.java
  • integration-tests/test_oauth21.py::test_prefix_redirect_uri_rejected
  • integration-tests/test_oauth21.py::test_loopback_literal_on_another_port_still_matches
Show the redirect URI host name during authorization (MUST, client ID metadata document security)Not implementedThe authorization server has no page of its own during /authorize. It sends the browser straight to the identity provider, so it shows no redirect URI host and no localhost warning.oauth/service/AuthorizeService.java
  • Run on 2026-10-13. GET /authorize for a public client with an S256 challenge returned 302 straight to the identity provider's /authorize
HTTP 403 for insufficient scope or permissions (MUST)PartialA REST call through the gateway that policy refuses gets HTTP 403. An MCP tools/call that policy refuses gets HTTP 200 with a JSON-RPC result that has isError true and the text 403.gateway/controller/GatewayMcpController.javagateway/service/GatewayFlowService.java
  • integration-tests/test_managed_gateway_mcp.py::test_tools_call_denied_scope_returns_isError
  • integration-tests/test_managed_gateway_auth.py::test_client_with_wrong_scope_returns_403
insufficient_scope challenge on a scope denial (SHOULD)Not implementedA REST call that policy refuses gets 403 with no WWW-Authenticate header. An MCP tool call that policy refuses gets an in-band error result. The 401 challenge carries resource_metadata and no scope parameter.gateway/service/GatewayFlowService.java
  • integration-tests/test_managed_gateway_auth.py::test_client_with_wrong_scope_returns_403
  • Run on 2026-10-13. POST /gateway/mcp with no token returned 401 with WWW-Authenticate: Bearer resource_metadata=... and no scope

UMA 2.0 Grant and Federated Authorization​

RequirementStatusWhat the code doesCodeEvidence
Resource registration and permission ticketsPartialResource registration and POST /permission work with a protection API token. /token does not redeem a permission ticket, so no RPT is issued.oauth/controller/UmaPermissionController.javaoauth/controller/TokenController.java
  • integration-tests/test_uma20.py::test_resource_registration_create (may skip)
  • integration-tests/test_uma20.py::test_permission_endpoint_returns_201_with_ticket (may skip)
  • Run on 2026-10-13. GET /.well-known/openid-configuration returned grant_types_supported without urn:ietf:params:oauth:grant-type:uma-ticket.

OpenID Connect CIBA Core 1.0​

RequirementStatusWhat the code doesCodeEvidence
Backchannel authentication, poll modeImplementedPOST /bc-authorize starts a request that a policy-named approver decides. The client polls /token with the CIBA grant. A second redemption returns invalid_grant.oauth/controller/BackchannelAuthorizeController.java
  • integration-tests/test_ciba.py::test_full_flow_issues_a_usable_token_for_the_approver
  • integration-tests/test_ciba.py::test_second_redemption_is_invalid_grant
  • integration-tests/test_ciba.py::test_login_hint_must_name_the_policy_approver

OpenID AuthZEN Authorization API​

RequirementStatusWhat the code doesCodeEvidence
Access evaluationImplementedPOST /access/v1/evaluation returns the policy decision. The caller needs a bearer token with the authzen scope, or the Basic credentials of a client entitled to authzen.pdp/authzen/controller/AccessEvaluationController.java
  • integration-tests/test_pdp.py::test_evaluation_standard_request_returns_decision
  • integration-tests/test_pdp.py::test_evaluation_bearerWithoutAuthzenScope_returns401

SPIFFE JWT-SVID​

RequirementStatusWhat the code doesCodeEvidence
JWT-SVID client authenticationImplementedA workload presents a JWT-SVID at /token. A bad signature, an expired SVID or an untrusted trust domain is refused.oauth/service/SpiffeAuthenticator.java
  • integration-tests/test_spiffe_identity.py::test_svid_token_issuance
  • integration-tests/test_spiffe_identity.py::test_svid_untrusted_domain
  • integration-tests/test_spiffe_identity.py::test_svid_bad_signature
  • integration-tests/test_spiffe_identity.py::test_svid_expired

Where the rows come from​

The rows live in services/pbac-documentation/src/data/standards.json. python3 scripts/docs_claims_check.py reads every row and fails when a code file no longer contains the text the row cites, a test the row names is no longer defined, or a cited test can call pytest.skip and is not marked may skip. It does not run the tests. To run them, pass the files and names from the Evidence column to ./pbac test.