DNS doesn’t need to be evil (not that evil anyway)
Decentralized resolution of identifiers with HTTPS
Phil Archer, Paul Dietrich, Gena Morgan
IIW 30, April 2020
Resolving GS1 identifiers
© GS1 2020
Resolution/dereferencing?
3
© GS1 2020
GS Who?
4
© GS1 2020
Key industries served
5
Transport & Logistics
Technical Industries
Healthcare
Retail
Marketplaces
Apparel
Fresh Foods
General Merchandise
CPG
© GS1 2020
Our management board
6
© GS1 2020
Global partner organisations
7
© GS1 2020
GS1 Digital Link
Making barcodes resolvable and linkable (sic)
8
© GS1 2020
Really complicated syntax…
9
9
506000
134369
https://example.com/gtin/
© GS1 2019
Any set of GS1 IDs can exist as a URI
10
GTIN:
Batch/lot:
Serial no:
Expiry:
09506000134376
ABC
123456
2021-12-31
https://example.com/gtin/09506000134376/lot/ABC/ser/123456?exp=211231
© GS1 2019
GS1 conformant resolvers
11
Resolves the identifier(s) and forwards the request to the correct destination
Resolver
TV ad, other related video
Product information page
Patient Information Leaflet
GTIN: 09507000009060
Clinical info
Instructions, recipes
Recall status
© GS1 2019
https://id.gs1.org/gtin/09506000134352
https://dalgiardino.com/risotto-rice-with-mushrooms/
© GS1 2019
id.gs1.org/01/09506000134352?linkType=gs1:recipeInfo
© GS1 2019
linkType=all is our DID Doc
14
[ { "href" : "https://example.com/product/ingredients",
"anchor" : "https://example.com/gtin/614141123452",
"rel" : [ "https://gs1.org/voc/ingredientsInfo" ],
"title" : "Ingredients (Ingrédients)",
"type" : "application/ld+json",
"hreflang" : [ "en" , "fr" ] },
{ "href" : "https://example.com/product/pip",
"anchor" : "https://example.com/gtin/614141123452",
"rel" : [ "https://gs1.org/voc/pip",
"https://gs1.org/voc/instructions"],
"title" : "Manufacturer's description",
"type" : "text/html",
"hreflang" : [ "en" ] },
Draft (we’re finalizing this)
© GS1 2019
At the network level
15
curl -I https://id.gs1.org/01/9506000134352
HTTP/1.1 307 Temporary Redirect
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: HEAD, GET, OPTIONS
X-Resolver-ProcessTimeMS: 23
Link: <https://dalgiardino.com/where-to-buy/>; rel="gs1:hasRetailers"; type="text/html"; hreflang="en"; title=“Where to buy Dal Giardino",
<https://dalgiardino.com/where-to-buy/index.html.es>; rel="gs1:hasRetailers"; type="text/html"; hreflang="es"; title="Donde comprar Dal Giardino",
<https://dalgiardino.com/where-to-buy/index.html.vi>; rel="gs1:hasRetailers"; type="text/html"; hreflang="vi"; ...
Location: https://dalgiardino.com/risotto-rice-with-mushrooms/
© GS1 2020
So we can connect barcodes to credentials & more
16
9
506000
134369
Organic
Gluten Free
Vegan
Can resolve to…
Consumer info
Supply chain info
© GS1 2020
It uses HTTP(s)
17
© GS1 2020
On resolvers…
18
© GS1 2020
Example VC
19
// An identifier for the credential
"id": "https://certification.example/coeliac/123456",
// The credential type. It's verifiable and a Nutritional Claim
"type": ["VerifiableCredential", "NutritionalClaim"],
// The entity that issued the credential - we'll use a GS1 Global Location ID for this
// This follows the GS1 Digital Link syntax
// Could be replaced with a DID directly or could resolve to a DID
"issuer": "https://id.gs1.org/gln/9521234567899",
// When the credential was issued
"issuanceDate": "2020-04-22T11:36:24Z",
// The subject of the claim is identified using a GS1 Digital Link URI
// The claim is provided using our extension to schema.org
"credentialSubject": {
"id": "https://id.gs1.org/gtin/9506000134352",
"nutritionalClaim": {
"id": "https://www.gs1.org/voc/NutritionalClaimTypeCode-FREE_FROM_GLUTEN"
}
}
© GS1 2020
Some questions…
20
© GS1 2020