| openapi: 3.0.1 |
| info: |
| title: Eclipse Hono™ Device Registry API |
| description: | |
| This API defines how to manage *Tenants*, *Devices*, and *Credentials*. |
| It acts as a common basis which all Hono device registries should |
| implement. |
| |
| ## Required APIs |
| |
| All operations, except the `tenants` resource are required. The tenant |
| management might be outside of the scope of the device registry and |
| managed by a higher level system. In this case all calls should simply |
| return `404`. However, if the `tenants` resource is implemented, then all |
| operations of it must be implemented. |
| |
| ## Security |
| |
| This specification explicitly leaves out the part of authenticating and |
| authorizing users with the device registry. It is assumed that some form |
| of token exchange between the user agent and the backend service will |
| take place. Like for example HTTP basic authentication, or a bearer token. |
| |
| ## Code generation |
| |
| This model is not optimized for generating code from it. Code generators |
| try to understand the model and then translate this into the require |
| programming language. Even if the there would be no bugs in the code |
| generators, that process would be already only be an approximation. So |
| this model does focus in the description of the API, and doesn't tweak |
| the specification in a way to please code generators. |
| |
| contact: |
| name: Contact details |
| url: https://www.eclipse.org/hono/community/get-in-touch/ |
| license: |
| name: EPL-2.0 |
| url: https://www.eclipse.org/legal/epl-2.0/ |
| version: 1.0.0 |
| |
| externalDocs: |
| description: Eclipse Hono™ web page |
| url: https://eclipse.org/hono |
| |
| tags: |
| - name: tenants |
| description: Tenant Management (optional) |
| externalDocs: |
| description: Hono Multi-Tenancy |
| url: https://www.eclipse.org/hono/docs/concepts/tenancy/ |
| - name: devices |
| description: Device registration |
| externalDocs: |
| description: Hono device identity |
| url: https://www.eclipse.org/hono/docs/concepts/device-identity/ |
| - name: credentials |
| description: Device credentials |
| externalDocs: |
| description: Hono device identity |
| url: https://www.eclipse.org/hono/docs/concepts/device-identity/ |
| |
| servers: |
| - url: '{server}/v1' |
| variables: |
| server: |
| default: http://hono.eclipse.org:28080 |
| |
| security: |
| - BearerAuth: [] |
| - BasicAuth: [] |
| |
| paths: |
| |
| # Tenant API |
| |
| /tenants: |
| |
| post: |
| tags: |
| - tenants |
| summary: Create new tenant with auto-generated ID |
| operationId: createTenant |
| requestBody: |
| description: New tenant information |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Tenant' |
| required: true |
| responses: |
| 201: |
| $ref: '#/components/responses/Created' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 409: |
| description: | |
| Indicates that an existing tenant uses a certificate authority with the same Subject DN. |
| If the client has no read access to the conflicting tenant then `403` should be returned instead. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| example: |
| error: "Root Certificate Authority is already used by other tenant" |
| subject-dn: "CN=devices,OU=iot,O=ACME" |
| |
| /tenants/{tenantId}: |
| |
| parameters: |
| - $ref: '#/components/parameters/tenantId' |
| |
| post: |
| tags: |
| - tenants |
| summary: Create new tenant |
| operationId: createTenantWithId |
| requestBody: |
| description: New tenant registration |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Tenant' |
| required: true |
| responses: |
| 201: |
| $ref: '#/components/responses/Created' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 409: |
| description: | |
| Indicates that tenant with the given identifier already exists or that an existing tenant uses |
| a certificate authority with the same Subject DN. |
| If the client has no read access to the conflicting tenant then `403` should be returned instead. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| example: |
| error: "tenant with given identifier already exists" |
| |
| get: |
| tags: |
| - tenants |
| summary: Get tenant information |
| operationId: getTenant |
| responses: |
| 200: |
| description: operation successful |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Tenant' |
| headers: |
| ETag: |
| description: Version of the resource |
| schema: |
| type: string |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| |
| put: |
| tags: |
| - tenants |
| summary: Update tenant information |
| operationId: updateTenant |
| parameters: |
| - $ref: '#/components/parameters/resourceVersion' |
| requestBody: |
| description: Tenant information |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Tenant' |
| required: true |
| responses: |
| 204: |
| $ref: '#/components/responses/Updated' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| 409: |
| description: | |
| Indicates that an existing tenant uses a certificate authority with the same Subject DN. |
| If the client has no read access to the conflicting tenant then `403` should be returned instead. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| example: |
| error: "Root Certificate Authority is already used by other tenant" |
| subject-dn: "CN=devices,OU=iot,O=ACME" |
| 412: |
| $ref: '#/components/responses/ResourceVersionMismatch' |
| |
| delete: |
| tags: |
| - tenants |
| summary: Delete tenant |
| operationId: deleteTenant |
| parameters: |
| - $ref: '#/components/parameters/resourceVersion' |
| responses: |
| 204: |
| $ref: '#/components/responses/Deleted' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| 412: |
| $ref: '#/components/responses/ResourceVersionMismatch' |
| |
| # Device API |
| |
| /devices/{tenantId}: |
| |
| parameters: |
| - $ref: '#/components/parameters/tenantId' |
| |
| post: |
| tags: |
| - devices |
| summary: Create new device registration with auto-generated ID |
| operationId: createDeviceRegistration |
| requestBody: |
| description: New device |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Device' |
| required: true |
| responses: |
| 201: |
| $ref: '#/components/responses/Created' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| |
| /devices/{tenantId}/{deviceId}: |
| |
| parameters: |
| - $ref: '#/components/parameters/tenantId' |
| - $ref: '#/components/parameters/deviceId' |
| |
| post: |
| tags: |
| - devices |
| summary: Create new device registration |
| operationId: createDeviceRegistrationWithId |
| requestBody: |
| description: New device |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Device' |
| required: true |
| responses: |
| 201: |
| $ref: '#/components/responses/Created' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 409: |
| $ref: '#/components/responses/AlreadyExists' |
| |
| get: |
| tags: |
| - devices |
| summary: Get device registration information |
| operationId: getRegistration |
| responses: |
| 200: |
| description: operation successful |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Device' |
| headers: |
| ETag: |
| description: Version of the resource |
| schema: |
| type: string |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| |
| put: |
| tags: |
| - devices |
| summary: Update existing device registration |
| operationId: updateRegistration |
| parameters: |
| - $ref: '#/components/parameters/resourceVersion' |
| requestBody: |
| description: Updated device registration |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Device' |
| required: true |
| responses: |
| 204: |
| $ref: '#/components/responses/Updated' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| 412: |
| $ref: '#/components/responses/ResourceVersionMismatch' |
| |
| delete: |
| tags: |
| - devices |
| summary: Delete device registration |
| operationId: deleteRegistration |
| parameters: |
| - $ref: '#/components/parameters/resourceVersion' |
| responses: |
| 204: |
| $ref: '#/components/responses/Deleted' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| 412: |
| $ref: '#/components/responses/ResourceVersionMismatch' |
| |
| /credentials/{tenantId}/{deviceId}: |
| |
| parameters: |
| - $ref: '#/components/parameters/tenantId' |
| - $ref: '#/components/parameters/deviceId' |
| |
| get: |
| tags: |
| - credentials |
| summary: Get credentials set of a device. |
| description: | |
| Get the credentials set of a device. As long as the device is |
| registered and the user has read access to it, this call should |
| never return "not found". |
| Depending on its implementation (or configuration), the device registry |
| can either return all credentials information including full secret details or |
| secret metadata along with the generated identifier (an `id` property). |
| The identifier can be used for the follow-up `update` operation). |
| operationId: getAllCredentials |
| responses: |
| 200: |
| description: Operation successful |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/CredentialsSet' |
| examples: |
| Full Credentials: |
| $ref: '#/components/examples/HashedPasswordExample' |
| Credentials Metadata: |
| $ref: '#/components/examples/MetaPasswordExample' |
| headers: |
| ETag: |
| description: Version of the resource |
| schema: |
| type: string |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| |
| put: |
| tags: |
| - credentials |
| summary: Update credentials set for registered device |
| description: If the device registry is handling full secret details, the updated credential set |
| will be an exact match of the provided content. If it is using secret metadata, |
| data will be merged in based on the secret identities. |
| operationId: setAllCredentials |
| parameters: |
| - $ref: '#/components/parameters/resourceVersion' |
| requestBody: |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/CredentialsSet' |
| examples: |
| Hashed Password: |
| $ref: '#/components/examples/HashedPasswordExample' |
| Plain Password: |
| $ref: '#/components/examples/PlainPasswordExample' |
| required: true |
| responses: |
| 204: |
| $ref: '#/components/responses/Updated' |
| 400: |
| $ref: '#/components/responses/MalformedRequest' |
| 401: |
| $ref: '#/components/responses/Unauthorized' |
| 403: |
| $ref: '#/components/responses/NotAllowed' |
| 404: |
| $ref: '#/components/responses/NotFound' |
| 412: |
| $ref: '#/components/responses/ResourceVersionMismatch' |
| |
| components: |
| |
| schemas: |
| |
| # Common schema |
| |
| Error: |
| type: object |
| additionalProperties: true |
| required: |
| - error |
| properties: |
| "error": |
| type: string |
| description: A human readable error message of what went wrong. |
| |
| DefaultProperties: |
| type: object |
| additionalProperties: true |
| description: Defaults for properties defined on the tenant and device level. |
| |
| Extensions: |
| type: object |
| additionalProperties: true |
| description: Allows arbitrary properties as extension to the ones |
| specified by the Hono API. |
| |
| # Tenant schema |
| |
| Tenant: |
| type: object |
| additionalProperties: false |
| properties: |
| "enabled": |
| type: boolean |
| default: true |
| "ext": |
| $ref: '#/components/schemas/Extensions' |
| "adapters": |
| type: array |
| description: | |
| A list of configuration options for certain types of protocol adapters. |
| If set then the array must not be empty. |
| Multiple entries for the same type are considered an error. |
| If not set, then all adapters are enabled using their respective |
| default configuration. |
| items: |
| $ref: '#/components/schemas/Adapter' |
| "defaults": |
| $ref: '#/components/schemas/DefaultProperties' |
| "minimum-message-size": |
| type: integer |
| default: 0 |
| description: | |
| The minimum message size in bytes. If set, then reported size of |
| telemetry, event and command messages is calculated as the minimum multiple |
| of the configured value that is greater than or equal to the messages |
| payload size. |
| "resource-limits": |
| $ref: '#/components/schemas/ResourceLimit' |
| "tracing": |
| $ref: '#/components/schemas/TracingConfig' |
| "trusted-ca": |
| type: array |
| description: | |
| The set of root certificate authorities which are used for verifying the signature of |
| client certificates that devices use for authentication. |
| items: |
| $ref: '#/components/schemas/TrustedCA' |
| |
| TrustedCA: |
| type: object |
| additionalProperties: false |
| properties: |
| "subject-dn": |
| type: string |
| description: | |
| The subject DN of the trusted root certificate in |
| the format defined by RFC 2253. |
| CAs of the *same* tenant may share the same subject DN, e.g. |
| allowing for the definition of overlapping validity periods. |
| However, CAs of *different* tenants must not share the same |
| subject DN in order to allow for the unique look up of a tenant by |
| the subject DN of one of its trusted CAs. |
| If the `cert` property is used to provide an X.509 certificate |
| then the subject DN is determined from the certificate and this |
| property is ignored. |
| Otherwise, i.e. if the `public-key` property is |
| used, this property is mandatory. |
| "public-key": |
| type: string |
| format: byte |
| description: | |
| The Base64 encoded binary DER encoding of the |
| trusted root certificate’s public key. |
| If the `cert` property is used to provide an |
| X.509 certificate then the public key is extracted |
| from the certificate and this property is ignored. |
| Either this property or `cert` must be set. |
| "algorithm": |
| type: string |
| description: | |
| The algorithm used for the public key of the CA. |
| If the `cert` property is used to provide an |
| X.509 certificate then the algorithm is determined |
| from the certificate and this property is ignored. |
| Otherwise, i.e. if the `public-key` property is |
| used, this property must be set to the algorithm |
| used, if other than the default. |
| default: RSA |
| example: EC |
| "not-before": |
| type: string |
| format: date-time |
| description: | |
| The point in time from which on the certificate authority |
| may be used for authenticating devices. |
| If the `cert` property is used to provide an |
| X.509 certificate then the point in time is |
| determined from the certificate and this property is ignored. |
| Otherwise, i.e. if the `public-key` property is |
| used, this property is mandatory. |
| "not-after": |
| type: string |
| format: date-time |
| description: | |
| The point in time until which the certificate authority |
| may be used for authenticating devices. |
| If the `cert` property is used to provide an |
| X.509 certificate then the point in time is |
| determined from the certificate and this property is ignored. |
| Otherwise, i.e. if the `public-key` property is |
| used, this property is mandatory. |
| "cert": |
| type: string |
| format: byte |
| description: | |
| The Base64 encoded binary DER encoding of the trusted X.509 root certificate. |
| This property can be used as a convenient alternative to |
| specifying the `public-key`, `not-before`, `not-after` and |
| `algorithm` properties explicitly. Implementors of this |
| API may choose to support this property only for uploading |
| a certificate but then extract all relevant data and store |
| it in the properties described above. |
| Either this property or `public-key` must be set. |
| example: |
| subject-dn: "CN=devices,OU=iot,O=ACME" |
| public-key: "Tk9UIEEgUFVCTElDIEtFWQ==" |
| algorithm: "EC" |
| not-before: "2019-10-03T13:45:16+02:00" |
| not-after: "2021-10-03T00:00:00Z" |
| |
| Adapter: |
| type: object |
| additionalProperties: true |
| required: |
| - type |
| properties: |
| "type": |
| type: string |
| "enabled": |
| type: boolean |
| default: false |
| "device-authentication-required": |
| type: boolean |
| default: true |
| "ext": |
| $ref: '#/components/schemas/Extensions' |
| |
| ResourceLimit: |
| type: object |
| additionalProperties: false |
| properties: |
| "max-connections": |
| type: integer |
| default: -1 |
| description: | |
| The maximum number of concurrent connections allowed from devices of this tenant. |
| A value of `-1` (the default) indicates that no limit is set. |
| "max-ttl": |
| type: integer |
| default: -1 |
| description: | |
| The maximum time-to-live (in seconds) to use for events published by |
| devices of this tenant. Any default TTL value specified |
| at either the tenant or device level will be limited to |
| the max value specified here. |
| If this property is set to a value greater than -1 and no |
| default TTL is specified for a device, the max value will |
| be used for events published by the device. |
| A value of `-1` (the default) indicates that no limit is set. |
| Note that this property contains the TTL in seconds whereas |
| the AMQP 1.0 specification defines a message's ttl header |
| to use milliseconds. |
| "data-volume": |
| $ref: '#/components/schemas/DataVolume' |
| "ext": |
| $ref: '#/components/schemas/Extensions' |
| |
| TracingConfig: |
| type: object |
| additionalProperties: false |
| properties: |
| "sampling-mode": |
| type: string |
| description: | |
| Defines if and how often OpenTracing spans are being |
| sampled when processing messages for this tenant. |
| The value `default` indicates that the underyling tracing |
| system's default sampling mode should be used. |
| The value `all` indicates that every span created for |
| messages of the tenant will be sampled. |
| The value `none` indicates that no spans should be sampled |
| at all for the tenant. |
| The mode defined here may be overridden for specific |
| devices by means of the `sampling-mode-per-auth-id` |
| property. |
| default: default |
| enum: |
| - default |
| - all |
| - none |
| "sampling-mode-per-auth-id": |
| type: object |
| description: | |
| Defines if and how often OpenTracing spans are being |
| sampled when processing messages for specific devices |
| of this tenant. |
| This object contains a property for each device for which |
| specific behavior should be defined, using the device's |
| authentication identifier as the property name and |
| the device specific sampling mode as its value. |
| The value `default` indicates that the underyling tracing |
| system's default sampling mode should be used. |
| The value `all` indicates that every span created for |
| messages of the tenant will be sampled. |
| The value `none` indicates that no spans should be sampled |
| at all for the tenant. |
| The mode defined for a particular device has precedence |
| over the value defined by the `sampling-mode` property. |
| additionalProperties: |
| type: string |
| description: | |
| The property name is the device's 'authentication identifier. |
| default: default |
| enum: |
| - default |
| - all |
| - none |
| |
| DataVolume: |
| type: object |
| additionalProperties: false |
| required: |
| - effective-since |
| properties: |
| "effective-since": |
| type: string |
| format: date-time |
| description: The date-time on which the data volume limit came into effect. |
| "max-bytes": |
| type: integer |
| default: -1 |
| description: The maximum number of bytes to be allowed for a tenant for the |
| defined period. |
| A value of -1 (the default) indicates that no limit is set. |
| "period": |
| $ref: '#/components/schemas/Period' |
| |
| Period: |
| type: object |
| additionalProperties: false |
| required: |
| - mode |
| properties: |
| "mode": |
| type: string |
| description: The mode of the data usage caluclation. The supported modes by |
| the default resource limit checks implementation are "days" |
| and "monthly". |
| "no-of-days": |
| type: integer |
| description: The number of days for which the data usage is to be calculated |
| if mode is set to "days". Otherwise, this property is ignored. |
| |
| # Devices schema |
| |
| Device: |
| type: object |
| additionalProperties: false |
| properties: |
| "enabled": |
| type: boolean |
| default: true |
| "defaults": |
| $ref: '#/components/schemas/DefaultProperties' |
| "via": |
| type: array |
| items: |
| type: string |
| description: The device IDs of the gateways this device is assigned to. |
| "ext": |
| $ref: '#/components/schemas/Extensions' |
| |
| # Credentials |
| |
| CredentialsSet: |
| type: array |
| description: A set of credentials. The entries in this list must be |
| unique by the composite key of `auth-id` and `type`. |
| items: |
| $ref: '#/components/schemas/TypedCredentials' |
| |
| TypedCredentials: |
| additionalProperties: false |
| oneOf: |
| - $ref: '#/components/schemas/PasswordCredentials' |
| - $ref: '#/components/schemas/PSKCredentials' |
| - $ref: '#/components/schemas/X509CertificateCredentials' |
| discriminator: |
| propertyName: type |
| mapping: |
| "hashed-password": '#/components/schemas/PasswordCredentials' |
| "psk": '#/components/schemas/PSKCredentials' |
| "x509-cert": '#/components/schemas/X509CertificateCredentials' |
| |
| CommonCredentials: |
| type: object |
| additionalProperties: false |
| required: |
| - auth-id |
| - type |
| properties: |
| "type": |
| type: string |
| "auth-id": |
| type: string |
| "enabled": |
| type: boolean |
| default: true |
| "ext": |
| $ref: '#/components/schemas/Extensions' |
| |
| PasswordCredentials: |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonCredentials' |
| - type: object |
| additionalProperties: false |
| properties: |
| "secrets": |
| type: array |
| items: |
| $ref: '#/components/schemas/PasswordSecret' |
| |
| PSKCredentials: |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonCredentials' |
| - type: object |
| additionalProperties: false |
| properties: |
| "secrets": |
| type: array |
| items: |
| $ref: '#/components/schemas/PSKSecret' |
| |
| X509CertificateCredentials: |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonCredentials' |
| - type: object |
| additionalProperties: false |
| properties: |
| "secrets": |
| type: array |
| items: |
| $ref: '#/components/schemas/X509CertificateSecret' |
| |
| CommonSecret: |
| type: object |
| additionalProperties: false |
| properties: |
| "id": |
| type: string |
| description: The device registry can assign an identity to the secret. |
| This value can be used to update secrets based on their metadata. |
| "enabled": |
| type: boolean |
| default: true |
| "not-before": |
| type: string |
| format: date-time |
| "not-after": |
| type: string |
| format: date-time |
| "comment": |
| type: string |
| |
| X509CertificateSecret: |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonSecret' |
| |
| PasswordSecret: |
| description: | |
| Password based secret definition <br> |
| __NOTE__: Defining password secrets with user provided password hash, function and salt is deprecated and will be removed |
| in the upcoming versions. You should use `pwd-plain` property only going forward. |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonSecret' |
| - type: object |
| additionalProperties: false |
| properties: |
| "hash-function": |
| type: string |
| example: bcrypt |
| description: __DEPRECATED!__ The name of the hash function used to create the password hash (defined in `pwd-hash` property). |
| If the password is defined using a `pwd-plain` property, this value will be ignored by the device registry. |
| This property should be empty when returning passwords from the device registry using only secret metadata. |
| In this case the id field must be set instead. |
| deprecated: true |
| "pwd-hash": |
| type: string |
| format: byte |
| description: __DEPRECATED!__ The password hash created using the `hash-function` and optional `salt` values. |
| If the password is defined using a `pwd-plain` property, this value will be ignored by the device registry. |
| This property should be empty when returning passwords from the device registry using only secret metadata. |
| In this case the id field must be set instead. |
| deprecated: true |
| "salt": |
| type: string |
| format: byte |
| description: __DEPRECATED!__ The Base64 encoding of the salt used in the password hash (defined in the `pwd-hash` property). |
| If the password is defined using a `pwd-plain` property, this value will be ignored by the device registry. |
| This property should be empty when returning passwords from the device registry using only secret metadata. |
| In this case the id field must be set instead. |
| deprecated: true |
| "pwd-plain": |
| type: string |
| format: byte |
| description: The clear text value of the password to be hashed by the device registry. |
| If this property is specified, the device registry will ignore user-provided hash properties (`hash-function`, `pwd-hash` and `salt`). |
| This property should never be stored by the device registry. |
| This property should be empty when returning passwords from the device registry. |
| |
| PSKSecret: |
| additionalProperties: false |
| allOf: |
| - $ref: '#/components/schemas/CommonSecret' |
| - type: object |
| additionalProperties: false |
| required: |
| - key |
| properties: |
| "key": |
| type: string |
| format: byte |
| |
| parameters: |
| |
| resourceVersion: |
| name: If-Match |
| in: header |
| description: The expected resource version |
| required: false |
| schema: |
| type: string |
| |
| tenantId: |
| name: tenantId |
| in: path |
| description: The ID of the tenant |
| required: true |
| schema: |
| type: string |
| example: DEFAULT_TENANT |
| |
| deviceId: |
| name: deviceId |
| in: path |
| description: The ID of the device |
| required: true |
| schema: |
| type: string |
| example: 4711 |
| |
| authId: |
| name: authId |
| in: path |
| description: The authentication ID of the device |
| required: true |
| schema: |
| type: string |
| example: sensor1 |
| |
| type: |
| name: type |
| in: path |
| description: The credentials type |
| required: true |
| schema: |
| type: string |
| example: sha-256 |
| |
| responses: |
| |
| Unauthorized: |
| description: Authentication credentials are required, but missing. |
| headers: |
| "WWW-Authenticate": |
| schema: |
| type: string |
| |
| Created: |
| description: Object created. |
| headers: |
| Location: |
| description: URL to the resource |
| schema: |
| type: string |
| format: uri |
| ETag: |
| description: The new version of the resource |
| schema: |
| type: string |
| content: |
| application/json: |
| schema: |
| type: object |
| additionalProperties: false |
| required: |
| - id |
| properties: |
| id: |
| type: string |
| description: The ID of the created object |
| |
| Updated: |
| description: Object updated. |
| headers: |
| ETag: |
| description: The new version of the resource |
| schema: |
| type: string |
| |
| Deleted: |
| description: Object deleted. |
| |
| NotFound: |
| description: | |
| Object not found. This may also be returned for some operations |
| if the user misses read access for the object. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| |
| NotAllowed: |
| description: | |
| Operation not allowed. If the user does not have read access |
| for this object, then `404` will be returned instead. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| |
| MalformedRequest: |
| description: Malformed request |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| |
| AlreadyExists: |
| description: | |
| Object already exists. If the user has no read access for |
| the existing object, then `403` should be returned instead. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| |
| ResourceVersionMismatch: |
| description: | |
| Expected resource version does not match current. |
| This can only happen when the request header `If-Match` |
| was set. |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| |
| securitySchemes: |
| |
| BearerAuth: |
| type: http |
| scheme: bearer |
| |
| BasicAuth: |
| type: http |
| scheme: basic |
| |
| examples: |
| HashedPasswordExample: |
| value: |
| [{ |
| auth-id: sensor1, |
| type: hashed-password, |
| secrets: [{ |
| "not-after": "2027-12-24T19:00:00Z", |
| "pwd-hash": "AQIDBAUGBwg=", |
| "salt": "Mq7wFw==", |
| "hash-function": "sha-512" |
| }] |
| }] |
| |
| PlainPasswordExample: |
| value: |
| [{ |
| auth-id: sensor1, |
| type: hashed-password, |
| secrets: [{ |
| "id": "349556ea-4902-47c7-beb0-1009ab693fb4", |
| "not-after": "2027-12-24T19:00:00Z", |
| "pwd-plain": "hono-secret" |
| }] |
| }] |
| MetaPasswordExample: |
| value: |
| [{ |
| auth-id: sensor1, |
| type: hashed-password, |
| secrets: [{ |
| "id": "349556ea-4902-47c7-beb0-1009ab693fb4", |
| "not-after": "2027-12-24T19:00:00Z", |
| "pwd-plain": "", |
| "pwd-hash": "", |
| "salt": "", |
| "hash-function": "" |
| }] |
| }] |