Grant read access to business partners
Within Catena-X, Business Partner Numbers (BPN) allow for sharing data with third parties.
This page details how to manage read access to specific assets of Asset Administration Shell Descriptor entities (Shells) within the Digital Twin Registry.
For accessing the Asset Administration Shells on the data provider’s tenant of the Digital Twin Registry, membership on that tenant is not enough. In addition to just having access to the tenant, the users and the technical clients also need the corresponding roles (AAS Viewer or AAS Manager). For details, refer to Authorization. |
Closed by default and accessible only by the owner
By default, only the owner of an Asset Administration Shell Descriptor entity can access it and can see all the Asset Administration Shell Descriptor entity attributes.
Semantic meaning of the externalSubjectId
attribute
The Digital Twin Registry allows the discovery of an Asset Administration Shell by search via specific asset IDs associated with the asset represented by the Asset Administration Shell. This is done by using the specificAssetIds
attribute within the Asset Administration Shell Descriptor.
To each such a specific asset ID, assign an externalSubjectId
to grant read access. The value of externalSubjectId
corresponds to a BPN or `PUBLIC_READABLE `.
Without an externalSubjectId
, the content remains exclusively visible to the owner of the Asset Administration Shell.
Example A - Lock access to owner of the Asset Administration Shell
SpecificAssetIds can be posted to existing Asset Administration Shells using the SpecificAssetId registration endpoint
[
{
"name": "partInstanceId",
"value": "24975539203421"
}
]
In this example, because an externalSubjectId
attribute is missing, only you as the owner can access the Asset Administration Shell listed below and its SpecificAssetId.
How read access is facilitated to data consumers
Only users for whom their Business Partner Numbers (BPN) fetched into the Eclipse Dataspace Components header of their API request matches the
externalSubjectId
of an Asset Administration Shell can discover and read the content that is allowed for their BPN or which is set public readable.
Enabling public readable access
To grant all users read access to a specific asset, include an externalSubjectId
.
Assign either the manufacturerPartId
or assetLifecyclePhase
as its name and set the value to PUBLIC_READABLE
.
Using PUBLIC_READABLE allows for reading the specificAssetId.name attribute. It works only for the value manufacturerPartId or assetLifecyclePhase .
Any other value of specificAssetId.name is considered invalid for enabling the public read access and therefore the public read access feature will not be
enabled for that specific asset. However, granting read access to particular BPNs is still possible, as it will be showcased below in
section Example C - Grant access to specific BPN.
|
Example B - Grant public readable access
Using the SpecificAssetId registration endpoint to post SpecificAssetIds to an existing Asset Administration Shell:
[
{
"name": "manufacturerPartId",
"value": "231982",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "PUBLIC_READABLE"
}
]
}
}
]
All readers of this Asset Administration Shell can read the specificAssetId because it is a manufacturerPartId
(also works for assetLifecyclePhase
) and it has been marked
as PUBLIC_READABLE
.
Allow read access to particular BPNs
Assign an externalSubjectId
to each specific asset of an Asset Administration Shell for which you want to grant read access. In the externalSubjectId
you can
add the BPN that is allowed to read the specific asset.
This functionality is facilitated by the comparison with the BPN header sent in API requests to the Digital Twin Registry, as described in How read access is facilitated to data consumers.
Example C - Grant access to specific BPN
Below example depicts the scenario of two dedicated business partners who can read this specific Asset Administration Shell.
As shown below, the specific Asset Administration Shell has to be defined twice because the externalSubjectId
attribute holds one BPN access.
[
{
"name": "manufacturerId",
"value": "123829238",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_001"
}
]
}
},
{
"name": "manufacturerId",
"value": "123829238",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_002"
}
]
}
}
]
Secure the list of BPNs having access
The business partners who can discover the existence of an Asset Administration Shell and thus its Asset Administration Shell Descriptor cannot discover which are the other business partners who also may find the same Asset Administration Shell, i.e. which other BPNs are assigned to the specific asset IDs.
Considering above example Example C - Grant access to specific BPN, the business partner "BPN_COMPANY_002" cannot detect that "BPN_COMPANY_001" also may discover the Asset Administration Shell via the specific asset ID manufacturerId
with value 123829238
, because this information is omitted in the API response that business partner 002 receives. Below example shows how the response looks like
for business partner 002:
[
{
"name": "manufacturerId",
"value": "123829238",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_002"
}
]
}
}
]
Combining the BPN-based and public readable read accesses and securing the read access list
Let’s assume the below scenario, in which the owner of the Asset Administration Shell Descriptor entity wants to grant read access to the Asset Administration Shell Descriptor for the following third parties for specific assets:
-
Business partner 001
-
Business partner 002
-
Business partner 003
In this example the Asset Administration Shell Descriptor entity has four specific asset IDs:
-
partInstanceId
— which is something the owner wants to keep private to themselves -
customerPartId
— which the owner wants to share with only one business partner -
manufacturerId
— which the owner wants to share with two business partners -
manufacturerPartId
— which the owner wants to be always readable for all business partners
In this example, the owner wants to allocate read access as detailed in the following table:
partInstanceId |
customerPartId |
manufacturerId |
manufacturerPartId |
|
---|---|---|---|---|
Business partner 001 |
— |
read access |
read access |
public readable |
Business partner 002 |
— |
— |
read access |
public readable |
Business partner 003 |
— |
— |
— |
public readable |
To achieve read access as indicated in the table, the owner of the Asset Administration Shell Descriptor entity needs to shape the specificAssetIds
as follows:
[
{
"name": "partInstanceId",
"value": "24975539203421"
},
{
"name": "customerPartId",
"value": "231982",
"externalSubjectId":
{
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_001"
}
]
}
},
{
"name": "manufacturerId",
"value": "123829238",
"externalSubjectId":
{
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_001"
}
]
}
},
{
"name": "manufacturerId",
"value": "123829238",
"externalSubjectId":
{
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "BPN_COMPANY_002"
}
]
}
},
{
"type": "GlobalReference",
"name": "manufacturerPartId",
"value": "231982",
"externalSubjectId":
{
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "PUBLIC_READABLE"
}
]
}
}
]
The following examples detail the response which each user receives when requesting the Asset Administration Shell Descriptor entity.
Note that if the Asset Administration Shell Descriptor entity is accessible through a BPN number or a public readable key, then only the id
, specificAssetIds
,
submodelDescriptors
and groups
attributes are provided.
For clarity, the containment of submodelDescriptors
and groups
are left empty in all the examples below. However, it is important to note that
all the submodel descriptors belonging to the Asset Administration Shell Descriptor entity and all the shell groups to which the Asset Administration Shell Descriptor entity belongs, are shared with the partners.
Example D - Accessing the Asset Administration Shell Descriptor entity as owner
{
"id":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"idShort":"Sensor_BNPL001000TS123_377-9efa-67gh023",
"globalAssetId":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"displayName":[
{
"language":"de",
"text":"Sensor fuer Auto"
},
{
"language":"en",
"text":"Sensor for car"
}
],
"description":[
{
"language":"de",
"text":"Das ist ein Beispiel."
},
{
"language":"en",
"text":"this is an example"
}
],
"assetKind":"Instance",
"assetType":"urn:uuid:123e4567-e89b-12d3-a456-896655440001",
"specificAssetIds":[
{
"name":"partInstanceId",
"value":"24975539203421"
},
{
"name":"customerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_001"
}
]
}
},
{
"name":"manufacturerId",
"value":"123829238",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_001"
}
]
}
},
{
"name":"manufacturerId",
"value":"123829238",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_002"
}
]
}
},
{
"type":"GlobalReference",
"name":"manufacturerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"PUBLIC_READABLE"
}
]
}
}
],
"submodelDescriptors":[
{
"id":"sensorEndpoint1",
"idShort":"exampleSubModelShortId",
"description":[
{
"language":"en",
"text":"sensor submodel"
}
],
"endpoints":[
{
"interface":"interfaceName",
"protocolInformation":{
"href":"https://edc.data.plane/sensor/submodel",
"endpointProtocol": "https",
"subprotocol": "DSP",
"subprotocolBody": "id=123;dspEndpoint=http://edc.control.plane/",
"subprotocolBodyEncoding":"plain",
"endpointProtocolVersion":["1.1.0"],
"securityAttributes":[
{
"type":"RFC_TLSA",
"key":"key1",
"value":"mySecurityValue"
}
]
}
}
],
"semanticId":{
"keys":[
{
"value":"abc",
"type":"Blob"
}
],
"value":"urn:samm:net.catenax.vehicle.submodelExample:2.0.0#Parts",
"type":"ExternalReference"
}
}
],
"groups":["sensor_group"],
"labels":["sensor"]
}
Example E - Accessing the Asset Administration Shell Descriptor entity as "BPN_COMPANY_001" BPN
As shown below, the business partner 001 is not aware about the sharing details with other partners.
{
"id":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"idShort":"Sensor_BNPL001000TS123_377-9efa-67gh023",
"globalAssetId":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"displayName":[...],
"description":[...],
"assetKind":"Instance",
"assetType":"urn:uuid:123e4567-e89b-12d3-a456-896655440001",
"specificAssetIds":[
{
"name":"customerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_001"
}
]
}
},
{
"name":"manufacturerId",
"value":"123829238",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_001"
}
]
}
},
{
"type":"GlobalReference",
"name":"manufacturerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"PUBLIC_READABLE"
}
]
}
}
],
"submodelDescriptors":[...],
"groups":[...],
"labels":[...]
}
Example F - Accessing the Asset Administration Shell Descriptor entity as "BPN_COMPANY_002" BPN
As shown below, the business partner 002 is not aware about the sharing details with other partners.
{
"id":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"idShort":"Sensor_BNPL001000TS123_377-9efa-67gh023",
"globalAssetId":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"displayName":[...],
"description":[...],
"assetKind":"Instance",
"assetType":"urn:uuid:123e4567-e89b-12d3-a456-896655440001",
"specificAssetIds":[
{
"name":"manufacturerId",
"value":"123829238",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"BPN_COMPANY_002"
}
]
}
},
{
"type":"GlobalReference",
"name":"manufacturerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"PUBLIC_READABLE"
}
]
}
}
],
"submodelDescriptors":[...],
"groups":[...],
"labels":[...]
}
Example G - Accessing the Asset Administration Shell Descriptor entity using public readable access
As shown below, the business partner 003 has access only to assets marked for public read access, and is not aware about the sharing details with other partners.
Also note that a user accessing a shell via public readable access has only access to the shell id, specificAssetIds and submodelDescriptors. Other fields are omitted.
{
"id":"urn:uuid:123e4567-e89b-12d3-a456-426655440000",
"specificAssetIds":[
{
"name":"manufacturerPartId",
"value":"231982",
"externalSubjectId":{
"type":"ExternalReference",
"keys":[
{
"type":"GlobalReference",
"value":"PUBLIC_READABLE"
}
]
}
}
],
"submodelDescriptors":[...],
}