HYPERLABS · Authentication Profile

Hyperlabs Authentication

Authentication

HYPERLABS secures its APIs with apiKey across 1 declared security scheme, as derived from its OpenAPI definitions.

signal-integritytest-and-measurementelectronic-componentsinstrumentationtime-domain-reflectometryhigh-speed-digitaldatacomhardwaregrpcmanufacturing
Methods: apiKey Schemes: 1 OAuth flows: API key in: header

Security Schemes

oauth2 apiKey
· in: header (Authorization)

Source

Authentication Profile

Raw ↑
generated: '2026-08-01'
method: derived
source: openapi/hyperlabs-web-openapi-original.json + grpc/hyperlabs-radium.proto + live probes
docs: https://www.hyperlabs.com/api/swagger/index.html
notes: >-
  HYPERLABS publishes no written authentication guide. This profile is derived from the published
  OpenAPI securityScheme, the token-issuing operations and their response schemas, and observed live
  behaviour. Baseline produced by 0-working/derive-authentication.py, then enriched with the token
  issuance flow, the federated sign-in providers, the anonymous/protected operation split and the gRPC
  surface — none of which the mechanical pass can see.
summary:
  types:
  - apiKey
  api_key_in:
  - header
  oauth2_flows: []
  effective_model: bearer-jwt
schemes:
- name: oauth2
  type: apiKey
  in: header
  parameter: Authorization
  description: 'Standard Authorization header using the Bearer scheme. Example: "Bearer {token}"'
  sources:
  - openapi/hyperlabs-web-openapi-original.json
  x-correction: >-
    The scheme KEY is "oauth2" but the declaration is type apiKey in the Authorization header. There is
    no authorizationUrl, no tokenUrl, no scopes and no flows object anywhere in the spec, so this is a
    bearer token, not an OAuth 2.0 scheme. Generators and scanners that key off the scheme name will
    mis-model this API. Corrected in overlays/hyperlabs-web-overlay.yaml.
  x-actual-type: http-bearer
token_issuance:
- operation: 'POST /v1/account/login'
  request: 'CustomerLoginDto {userName, password}'
  response: 'CustomerLoginResultDto {tokenType, accessToken}'
  anonymous: true
- operation: 'POST /v1/account/google/login'
  precedes_with: 'GET /v1/account/google/params (returns CustomerGoogleParamsDto {clientId})'
  request: CustomerGoogleLoginDto
  response: CustomerLoginResultDto
  anonymous: true
  errors: 400 with RFC 7807 ProblemDetails
- operation: 'POST /v1/account/microsoft/login'
  precedes_with: 'GET /v1/account/microsoft/params (returns CustomerMicrosoftParamsDto {clientId})'
  request: CustomerMicrosoftLoginDto
  response: CustomerLoginResultDto
  anonymous: true
  errors: 400 with RFC 7807 ProblemDetails
- operation: 'POST /v1/admin/account/login'
  note: separate staff login issuing LoginResultDto for the /v1/admin surface
federated_identity:
  role: relying-party
  providers: [Google, Microsoft]
  discovery_document_published: false
  notes: >-
    HYPERLABS consumes Google and Microsoft OIDC sign-in; it is not itself an OIDC provider and serves
    no /.well-known/openid-configuration.
account_lifecycle:
  register: 'POST /v1/account/register (RegisterCustomerDto) -> 204'
  confirm: 'POST /v1/account/confirm-registration'
  forgot_password: 'POST /v1/account/forgot-password -> 204'
  reset_password: 'POST /v1/account/reset-password -> 204'
  change_password: 'POST /v1/account/change-password (authenticated) -> 204'
authorization:
  model: role-based
  roles_endpoint: 'GET /v1/admin/roles'
  surfaces:
  - {prefix: /v1/admin, operations: 115, audience: staff}
  - {prefix: '/v1/customer + /v1/profile', audience: authenticated customer}
  - {prefix: 'other /v1', audience: anonymous public}
  scopes: none — no OAuth scope surface exists, so no scopes/ artifact is emitted
operation_split:
  total: 175
  protected: 121
  anonymous: 54
  note: 'protected operations declare security [{oauth2: []}] with 401 and 403 responses'
bot_protection:
  mechanism: Google reCAPTCHA
  applies_to:
  - 'POST /v1/request-quote'
  - 'POST /v1/contact-messages'
  - 'POST /v1/wishlist/quote'
  - 'POST /v1/wishlist/share'
  - 'POST /v1/customer/wishlist/quote'
  field: recaptchaToken
  site_key_exposure: 'the public site key is served in the clear at https://www.hyperlabs.com/config/config.js (expected — reCAPTCHA site keys are public by design)'
grpc:
  service: radium.v1.Radium
  source: grpc/hyperlabs-radium.proto
  authentication: none
  transport_security: none
  evidence: >-
    The provider's own published sample client (TDR11100_gRPC_public.py) opens
    grpc.insecure_channel(f"{ip}:50052") — plaintext, no TLS, no credentials, and no per-call metadata
    other than an optional "req_id" correlation key. Anyone with network reach to the instrument can
    control it, including Reset and UploadLicense. This is a local-lab-network trust model.
  licensing: >-
    The service does gate capability by license (GetLicenseStatus, GetLicenseInfo, UploadLicense,
    GenerateLicenseRequest, ReloadLicense) — that is entitlement, not authentication.
x-evidence:
  fetched: '2026-08-01'
  sources:
  - {url: 'https://www.hyperlabs.com/api/swagger/v1/swagger.json', http_status: 200}
  - {url: 'https://www.hyperlabs.com/api/v1/website/contact', http_status: 200, note: anonymous call succeeded with no Authorization header}
  - {url: 'https://www.hyperlabs.com/config/config.js', http_status: 200}
  - {url: 'https://github.com/HYPERLABS/TDR11100', http_status: 200}