Consumer Data Right (Energy) · Authentication Profile

Cdr Energy Authentication

Authentication

Consumer Data Right (Energy) secures its APIs with oauth2, openIdConnect, mutualTLS, and http across 5 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode and clientCredentials flow(s).

EnergyAustraliaUtilitiesElectricityConsumer Data RightOpen EnergySmart MeteringDEREnergy MarketsRegulationGovernmentOpen Data
Methods: oauth2, openIdConnect, mutualTLS, http Schemes: 5 OAuth flows: authorizationCode, clientCredentials API key in:

Security Schemes

CDR consumer authorisation oauth2
Client authentication (data recipient to data holder / register) oauth2
Transport security mutualTLS
CDR Register OpenID Provider oauth2
Bearer token http
scheme: bearer · in: header (Authorization)

Source

Authentication Profile

Raw ↑
generated: '2026-07-27'
method: searched
source: https://consumerdatastandardsaustralia.github.io/standards/#security-profile
docs: https://consumerdatastandardsaustralia.github.io/standards/#security-profile
legacy_docs: https://consumerdatastandardsaustralia.github.io/infosec/
notes: >-
  The mechanical derive pass (derive-authentication.py) found nothing: none of the six Consumer Data
  Standards OpenAPI documents declares components.securitySchemes. That is not an absence of a
  security model - the CDR keeps its security model in a separate normative Security Profile that all
  six APIs inherit, which is why the specs carry Authorization, x-fapi-auth-date,
  x-fapi-customer-ip-address and x-cds-client-headers request headers but no scheme objects. This
  profile was read from the published Security Profile section of the standards and from the CDR
  Register's live OpenID Provider metadata.
summary:
  types: [oauth2, openIdConnect, mutualTLS, http]
  oauth2_flows: [authorizationCode, clientCredentials]
  profile: FAPI 1.0 Advanced
  accreditation_required: true
  spec_declared: false
access_model:
  open:
    description: >-
      No credential of any kind. Product reference data and ecosystem discovery.
    operations: [listEnergyPlans, getEnergyPlanDetail, getStatus, getOutages, getDataHolderBrands, getDataHolderBrandsSummary, getDataHolderStatuses, getDataRecipients, getDataRecipientsStatuses, getSoftwareProductsStatuses, getRegisterJwks, getRegisterOpenIdProviderConfig]
    verified: >-
      53 of 84 registered energy data holder brands answered GET /cds-au/v1/energy/plans anonymously
      on 2026-07-27; the CDR Register brand summary answered anonymously with only an x-v header.
  gated:
    description: >-
      Every consumer-data endpoint. Requires ACCC accreditation as a Data Recipient, a registered
      software product, mutual TLS with a CDR-issued client certificate, and a consumer-authorised
      access token bound to that certificate.
    operations_note: all remaining operations across the Energy, Common, Secondary Data Holder, DCR and Admin APIs
schemes:
- name: CDR consumer authorisation
  type: oauth2
  flow: authorizationCode
  profile: FAPI 1.0 Advanced (FAPI-1.0-Advanced)
  requirements:
  - Data Holders MUST support FAPI 1.0 Advanced Profile.
  - Data Holders MUST support Authorization Code Flow; response_type MUST be `code`.
  - From 12 May 2025 Data Recipient Software Products SHALL only send authorisation requests using Authorization Code Flow (the OIDC Hybrid Flow is retired).
  - Pushed Authorisation Requests (RFC 9126) - data holder metadata sets require_pushed_authorization_requests true.
  - PKCE (RFC 7636) with code_challenge_method S256.
  - Request object signed with PS256 or ES256.
  - Access and refresh tokens are mutual-TLS sender-constrained (tls_client_certificate_bound_access_tokens true).
  - Refresh tokens MUST be issued with an exp equal to the sharing duration the consumer authorised (from 12 May 2025).
  discovery: <data-holder-base>/.well-known/openid-configuration
  discovery_note: >-
    Per-brand. Data holder OpenID Provider metadata additionally MUST include
    cdr_arrangement_revocation_endpoint. Discover the 84 energy brands via the CDR Register.
  scopes: scopes/cdr-energy-scopes.yml
- name: Client authentication (data recipient to data holder / register)
  type: oauth2
  method: private_key_jwt
  requirements:
  - Data Holders and the CDR Register MUST authenticate Data Recipient Software Products using Private Key JWT Client Authentication.
  - Client assertion JWT signed with PS256 or ES256.
  - The PKI Mutual TLS OAuth Client Authentication Method (tls_client_auth) SHALL NOT be used for client authentication.
  - Data Recipient Software Products MUST authenticate Data Holders and the CDR Register using self-signed JWT client assertion or private_key_jwt.
  - When authenticating the CDR Register, client_id MUST be `cdr-register`.
- name: Transport security
  type: mutualTLS
  requirements:
  - All back-channel communication between Data Recipient and Data Holder systems MUST incorporate MTLS as part of the TLS handshake.
  - MTLS Holder of Key binds issued tokens to the client certificate (RFC 8705).
  - Client certificates are issued, managed and revoked by the CDR Register PKI.
  - Participants MUST only support BCP 195 recommended ciphers (from 17 March 2025).
- name: CDR Register OpenID Provider
  type: oauth2
  flow: clientCredentials
  issuer: https://api.cdr.gov.au/idp
  token_endpoint: https://secure.api.cdr.gov.au/idp/connect/token
  jwks_uri: https://api.cdr.gov.au/idp/.well-known/openid-configuration/jwks
  token_endpoint_auth_methods_supported: [private_key_jwt]
  token_endpoint_auth_signing_alg_values_supported: [PS256, ES256]
  id_token_signing_alg_values_supported: [PS256]
  code_challenge_methods_supported: [plain, S256]
  tls_client_certificate_bound_access_tokens: true
  scopes_supported: [cdr-register:read]
  source: well-known/cdr-energy-register-openid-configuration.json
  live_probe:
    url: https://api.cdr.gov.au/idp/.well-known/openid-configuration
    status: 200
    date: '2026-07-27'
- name: Bearer token
  type: http
  scheme: bearer
  in: header
  parameter: Authorization
  source: 'Authorization header parameter declared on 5 operations across openapi/*.json'
  note: >-
    The Authorization header carries the consumer-authorised, certificate-bound access token. It is
    the only credential visible in the OpenAPI documents.
onboarding:
  model: >-
    There is no developer portal that issues keys. A prospective data recipient applies to the ACCC
    for accreditation, registers a software product on the CDR Register, obtains a Software Statement
    Assertion (SSA) from the Register, then self-registers with each data holder over mutual TLS
    using Dynamic Client Registration.
  steps:
  - Apply for and obtain ACCC accreditation as a Data Recipient.
  - Register a software product and obtain PKI client certificates from the CDR Register.
  - Authenticate to the Register OpenID Provider with client_credentials + private_key_jwt for scope cdr-register:read.
  - GET the Software Statement Assertion (getSoftwareStatementAssertion).
  - POST the SSA to each data holder's /register endpoint (postClientRegistration) over MTLS.
  - Manage or delete that registration (getClientRegistration / putClientRegistration / deleteClientRegistration).
  spec: openapi/cdr-dcr-openapi.json
  ssa_claims: [iss, iat, exp, jti, legal_entity_id, legal_entity_name, org_id, org_name, client_name, client_description, client_uri, redirect_uris, sector_identifier_uri, logo_uri, tos_uri, policy_uri, jwks_uri, revocation_uri, recipient_base_uri, software_id, software_roles, scope]
consent:
  model: >-
    Consumer consent is explicit, scoped, time-bounded and revocable. Consent is expressed to the
    consumer in standardised data cluster and permission language rather than raw scope strings, and
    is represented server to server as a CDR Arrangement identified by a cdr_arrangement_id.
  revocation:
    data_holder_endpoint: cdr_arrangement_revocation_endpoint (advertised in data holder OIDC metadata)
    data_recipient_endpoint: revocation_uri / arrangements/revoke (advertised in the SSA)
    note: Either party may revoke; see asyncapi/cdr-energy-webhooks.yml for the callback direction.
  error_codes: [urn:au-cds:error:cds-all:Authorisation/RevokedConsent, urn:au-cds:error:cds-all:Authorisation/InvalidConsent, urn:au-cds:error:cds-all:Authorisation/InvalidArrangement, urn:au-cds:error:cds-all:Authorisation/AdrStatusNotActive]