Skip to content

OpenAPI for Identifiers is not Base64url #191

@sebbader-sap

Description

@sebbader-sap

What happens?

Given a valid base64url-encoded value, the current pattern in OpenAPI enforces a validation error. Example: https://app.swaggerhub.com/apis/Plattform_i40/DiscoveryServiceSpecification/V3.0.1_SSP-001#/Asset%20Administration%20Shell%20Basic%20Discovery%20API/GetAllAssetAdministrationShellIdsByAssetLink
Query parameter assetIds:

{
  "name": "serial-number",
  "value": "0123456",
  "externalSubjectId":
    {
      "keys":
        [
          {
            "type": "AssetAdministrationShell",
            "value": "defaultSpecificAssetId",
          },
        ],
      "type": "ModelReference",
    },
  "semanticId":
    {
      "keys":
        [{ "type": "GlobalReference", "value": "eClassDefaultSemanticId" }],
      "type": "ExternalReference",
     }
}

is correctly base64url encoded as
ewogICJuYW1lIjogInNlcmlhbC1udW1iZXIiLAogICJ2YWx1ZSI6ICIwMTIzNDU2IiwKICAiZXh0ZXJuYWxTdWJqZWN0SWQiOgogICAgewogICAgICAia2V5cyI6CiAgICAgICAgWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJBc3NldEFkbWluaXN0cmF0aW9uU2hlbGwiLAogICAgICAgICAgICAidmFsdWUiOiAiZGVmYXVsdFNwZWNpZmljQXNzZXRJZCIsCiAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICJ0eXBlIjogIk1vZGVsUmVmZXJlbmNlIiwKICAgIH0sCiAgInNlbWFudGljSWQiOgogICAgewogICAgICAia2V5cyI6CiAgICAgICAgW3sgInR5cGUiOiAiR2xvYmFsUmVmZXJlbmNlIiwgInZhbHVlIjogImVDbGFzc0RlZmF1bHRTZW1hbnRpY0lkIiB9XSwKICAgICAgInR5cGUiOiAiRXh0ZXJuYWxSZWZlcmVuY2UiLAogICAgIH0KfQ

However, a server strictly validating against the OpenAPI file will throw a validation error ("invalid encoding" or similar).

This value will however pass:
ewogICJuYW1lIjogInNlcmlhbC1udW1iZXIiLAogICJ2YWx1ZSI6ICIwMTIzNDU2IiwKICAiZXh0ZXJuYWxTdWJqZWN0SWQiOgogICAgewogICAgICAia2V5cyI6CiAgICAgICAgWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJBc3NldEFkbWluaXN0cmF0aW9uU2hlbGwiLAogICAgICAgICAgICAidmFsdWUiOiAiZGVmYXVsdFNwZWNpZmljQXNzZXRJZCIsCiAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICJ0eXBlIjogIk1vZGVsUmVmZXJlbmNlIiwKICAgIH0sCiAgInNlbWFudGljSWQiOgogICAgewogICAgICAia2V5cyI6CiAgICAgICAgW3sgInR5cGUiOiAiR2xvYmFsUmVmZXJlbmNlIiwgInZhbHVlIjogImVDbGFzc0RlZmF1bHRTZW1hbnRpY0lkIiB9XSwKICAgICAgInR5cGUiOiAiRXh0ZXJuYWxSZWZlcmVuY2UiLAogICAgIH0KfQ==

Why is this wrong?

      schema:
        type: array
        items:
          type: string
          format: byte

means base64 encoding, not base64url.

How should it be fixed?

As base64url can not be expressed in OpenAPI, remove the format: byte from all files:

      schema:
        type: array
        items:
          type: string

Compliance to base64url must be described/checked outside of OpenAPI anyway.

  • I have signed the required Developer Certificate of Origin (DCO) already.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions