CoreStack · Authentication Profile

Corestack Authentication

Authentication

CoreStack secures its APIs with apiKey and oauth2 across 4 declared security schemes, as derived from its OpenAPI definitions.

cloud-governancefinopscloud-cost-managementcloud-security-posture-managementcompliancemulti-cloudcnapppolicy-as-codecloudopsmcpagent-nativekubernetes
Methods: apiKey, oauth2 Schemes: 4 OAuth flows: API key in: header

Security Schemes

auth_token apiKey
· in: header (X-Auth-Token)
auth_user apiKey
· in: header (X-Auth-User)
mcp_oauth oauth2
mcp_api_keys apiKey
· in: header (X-API-Access-Key)

Source

Authentication Profile

Raw ↑
generated: '2026-08-11'
method: searched
source: https://docs.corestack.io/docs/corestack-api-modules
docs:
  rest: https://docs.corestack.io/docs/corestack-api-modules
  auth_token_operation: https://docs.corestack.io/reference/authtoken
  refresh_token_operation: https://docs.corestack.io/reference/refreshtoken
  mcp: https://docs.corestack.io/docs/mcp-client-configuration
  rbac: https://docs.corestack.io/docs/role-based-access-control-rbac
  sso: https://docs.corestack.io/docs/setting-up-okta-sso
spec_source: openapi/corestack-external-api-openapi-original.json

summary:
  types:
  - apiKey
  - oauth2
  api_key_in:
  - header
  note: >-
    Two distinct authentication systems, one per surface. The REST API uses a custom two-header
    key-plus-token scheme with no OAuth anywhere in the 838-operation contract. The MCP server, added
    later, uses either an OAuth 2.1 authorization-code + PKCE flow with RFC 7591 dynamic client
    registration, or a separate pair of API access/secret key headers. The two surfaces do not share
    credentials or header names.

schemes:
- name: auth_token
  surface: rest
  type: apiKey
  in: header
  parameter: X-Auth-Token
  sources:
  - openapi/corestack-external-api-openapi-original.json
  note: >-
    The only securityDefinition declared in the published Swagger 2.0 document. The spec declares
    it but does NOT declare the companion X-Auth-User header, which the docs state is required on
    every call except the token operations — a real gap between the contract and the documentation.
- name: auth_user
  surface: rest
  type: apiKey
  in: header
  parameter: X-Auth-User
  sources:
  - https://docs.corestack.io/docs/corestack-api-modules
  documented_only: true
  note: Username of the tenant. Required on all operations except the AuthToken API. Not in the spec.
- name: mcp_oauth
  surface: mcp
  type: oauth2
  flow: authorizationCode
  pkce: S256
  dynamic_client_registration: true
  issuer: https://cloud.corestack.io/mcp
  authorizationUrl: https://cloud.corestack.io/mcp/oauth/authorize
  tokenUrl: https://cloud.corestack.io/mcp/oauth/token
  registrationUrl: https://cloud.corestack.io/mcp/oauth/register
  scopes:
  - openid
  - email
  - profile
  sources:
  - well-known/corestack-oauth-authorization-server.json
  - well-known/corestack-oauth-protected-resource.json
- name: mcp_api_keys
  surface: mcp
  type: apiKey
  in: header
  parameter: X-API-Access-Key
  companion_parameter: X-API-Secret-Key
  sources:
  - https://docs.corestack.io/docs/mcp-client-configuration

credential_lifecycle:
  long_lived:
    name: Access Key + Secret Key
    issued_by: Account Administrator, per user, via Identity and Access Management > Users
    delivery: email
    expiry: none stated — valid until manually revoked or regenerated
    revocation: >-
      Regenerating overwrites and immediately invalidates the previous pair. Keys stop working when
      the user is terminated or suspended; for SSO users, suspension in the org LDAP ends platform
      access but the platform Access Key must be deleted separately.
  short_lived:
    name: Auth Token
    minted_by: POST /v1/auth/tokens with {access_key, secret_key}
    max_validity: 6 hours
    documented_default: 1 hour, per the AuthToken reference page
    refresh:
      operation: POST /v1/auth/tokens/refresh
      max_refreshes: 3
      note: >-
        Each refresh extends validity by another hour and increments refresh_count. After the third
        refresh the token cannot be extended and a new AuthToken call is required.
    expired_signal: 401 Unauthorized
  note: >-
    The docs carry two different validity numbers for the same token — "valid only for an hour" on
    the AuthToken reference page and a "maximum of 6 hours" token-expiration policy table on the API
    guide. Both are the provider's own published figures; recorded as-is rather than reconciled.

sso:
  supported: true
  documented_provider: Okta
  operation: SsoRedirectUrl (POST /v1/sso_auth/tokens/{sso_name})
  note: LDAP-backed identity; users are provisioned in CoreStack but authenticated by the org IdP.

authorization_model:
  style: RBAC
  scoping:
  - master account
  - tenant
  - user group
  - role
  note: >-
    Multi-tenant by design. Most operations require a tenant_id in the path, and many also require
    an account ID; both are returned in the AuthToken response. Roles determine which modules and
    APIs a user can reach. The MCP server explicitly inherits the caller's role — it grants nothing
    additional.

gaps:
- The spec declares only X-Auth-Token; X-Auth-User is documented but absent from securityDefinitions.
- No OAuth 2.0 on the REST surface at all, despite an enterprise, multi-tenant, RBAC-scoped API.
- No scope model on REST — authorization is role-based and invisible to the contract.
- Token validity is documented inconsistently (1 hour vs 6 hours) across two provider pages.

x-evidence:
  fetched: '2026-08-11'
  probes:
  - url: https://api.corestack.io/v1/auth/tokens
    method: POST
    http_status: 400
    body: '{"message": "Please Provide Username/Password or AccessKey/SecretKey"}'
    note: Confirms the token endpoint is live and names the two accepted credential shapes.
  - url: https://cloud.corestack.io/mcp
    method: POST
    http_status: 401
    note: OAuth challenge naming the RFC 9728 resource metadata document.